FileFilter.java revision 8136954a3ffb2c1e0014abe05f1effa1fb3e10c3
1/*
2 * Copyright (C) 2007 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.dumprendertree;
18
19import java.util.Vector;
20import android.util.*;
21
22public class FileFilter {
23
24    private static final String LOGTAG = "FileFilter";
25
26    // Returns whether we should ignore this test and skip running it.
27    // Currently we use this only for tests that crash or hang DumpRenderTree.
28    // TODO: Fix these and eliminate this method.
29    public static boolean ignoreTest(String file) {
30        for (int i = 0; i < ignoreTestList.length; i++) {
31            if (file.endsWith(ignoreTestList[i])) {
32                Log.v(LOGTAG, "File path in list of ignored tests: " + file);
33                return true;
34            }
35        }
36        return false;
37    }
38
39    // Returns whether a directory does not contain layout tests and so can be
40    // ignored.
41    public static boolean isNonTestDir(String file) {
42        for (int i = 0; i < nonTestDirs.length; i++) {
43            if (file.endsWith(nonTestDirs[i])) {
44                return true;
45            }
46        }
47        return false;
48    }
49
50    // Returns whether we should ignore the result of this test.
51    public static boolean ignoreResult(String file) {
52        for (int i = 0; i < ignoreResultList.size(); i++) {
53            if (file.endsWith(ignoreResultList.get(i))) {
54                Log.v(LOGTAG, "File path in list of ignored results: " + file);
55                return true;
56            }
57        }
58        return false;
59    }
60
61    final static Vector<String> ignoreResultList = new Vector<String>();
62
63    static {
64        fillIgnoreResultList();
65    }
66
67    static final String[] nonTestDirs = {
68        ".", // ignore hidden directories and files
69        "resources", // ignore resource directories
70        ".svn", // don't run anything under .svn folder
71        "platform"  // No-Android specific tests
72    };
73
74    static final String[] ignoreTestList = {
75        "editing/selection/move-left-right.html", // Causes DumpRenderTree to hang
76        "fast/js/excessive-comma-usage.html", // Tests huge initializer list, causes OOM.
77        "fast/js/regexp-charclass-crash.html", // RegExp is too large, causing OOM
78        "fast/regex/test1.html", // Causes DumpRenderTree to hang with V8
79        "fast/regex/slow.html", // Causes DumpRenderTree to hang with V8
80        "ietestcenter/Javascript/15.4.4.15-3-14.html", // hangs the layout tests
81        // http://b/issue?id=2889595
82        "ietestcenter/Javascript/15.4.4.15-3-29.html", // hangs the layout tests
83        // http://b/issue?id=2889596
84        "ietestcenter/Javascript/15.4.4.15-3-8.html" // hangs the layout tests
85        // http://b/issue?id=2889598
86    };
87
88    static void fillIgnoreResultList() {
89        // This first block of tests are for features for which Android
90        // should pass all tests. They are skipped only temporarily.
91        // TODO: Fix these failing tests and remove them from this list.
92        ignoreResultList.add("fast/events/touch/basic-multi-touch-events.html"); // Requires multi-touch
93        ignoreResultList.add("fast/events/touch/touch-target.html"); // Requires multi-touch
94        ignoreResultList.add("http/tests/appcache/empty-manifest.html"); // flaky
95        ignoreResultList.add("http/tests/appcache/fallback.html"); // http://b/issue?id=2713004
96        ignoreResultList.add("http/tests/appcache/foreign-iframe-main.html"); // flaky - skips states
97        ignoreResultList.add("http/tests/appcache/manifest-with-empty-file.html"); // flaky
98        ignoreResultList.add("storage/database-lock-after-reload.html"); // Succeeds but DumpRenderTree does not read result correctly
99        ignoreResultList.add("storage/hash-change-with-xhr.html"); // Succeeds but DumpRenderTree does not read result correctly
100        ignoreResultList.add("storage/open-database-creation-callback-isolated-world.html"); // Requires layoutTestController.evaluateScriptInIsolatedWorld()
101        ignoreResultList.add("storage/statement-error-callback-isolated-world.html"); // Requires layoutTestController.evaluateScriptInIsolatedWorld()
102        ignoreResultList.add("storage/statement-success-callback-isolated-world.html"); // Requires layoutTestController.evaluateScriptInIsolatedWorld()
103        ignoreResultList.add("storage/transaction-callback-isolated-world.html"); // Requires layoutTestController.evaluateScriptInIsolatedWorld()
104        ignoreResultList.add("storage/transaction-error-callback-isolated-world.html"); // Requires layoutTestController.evaluateScriptInIsolatedWorld()
105        ignoreResultList.add("storage/transaction-success-callback-isolated-world.html"); // Requires layoutTestController.evaluateScriptInIsolatedWorld()
106
107        // Expected failures due to unsupported features.
108        ignoreResultList.add("fast/events/touch/touch-coords-in-zoom-and-scroll.html"); // Requires eventSender.zoomPageIn(),zoomPageOut()
109        ignoreResultList.add("fast/workers"); // workers not supported
110        ignoreResultList.add("http/tests/eventsource/workers"); // workers not supported
111        ignoreResultList.add("http/tests/workers"); // workers not supported
112        ignoreResultList.add("http/tests/xmlhttprequest/workers"); // workers not supported
113        ignoreResultList.add("storage/domstorage/localstorage/private-browsing-affects-storage.html"); // private browsing not supported
114        ignoreResultList.add("storage/domstorage/sessionstorage/private-browsing-affects-storage.html"); // private browsing not supported
115        ignoreResultList.add("storage/indexeddb"); // indexeddb not supported
116        ignoreResultList.add("storage/private-browsing-readonly.html"); // private browsing not supported
117        ignoreResultList.add("websocket/tests/workers"); // workers not supported
118
119        // Expected failures due to missing expected results
120        ignoreResultList.add("dom/xhtml/level3/core/canonicalform08.xhtml");
121        ignoreResultList.add("dom/xhtml/level3/core/canonicalform09.xhtml");
122        ignoreResultList.add("dom/xhtml/level3/core/documentgetinputencoding03.xhtml");
123        ignoreResultList.add("dom/xhtml/level3/core/entitygetinputencoding02.xhtml");
124        ignoreResultList.add("dom/xhtml/level3/core/entitygetxmlversion02.xhtml");
125        ignoreResultList.add("dom/xhtml/level3/core/nodegetbaseuri05.xhtml");
126        ignoreResultList.add("dom/xhtml/level3/core/nodegetbaseuri07.xhtml");
127        ignoreResultList.add("dom/xhtml/level3/core/nodegetbaseuri09.xhtml");
128        ignoreResultList.add("dom/xhtml/level3/core/nodegetbaseuri10.xhtml");
129        ignoreResultList.add("dom/xhtml/level3/core/nodegetbaseuri11.xhtml");
130        ignoreResultList.add("dom/xhtml/level3/core/nodegetbaseuri15.xhtml");
131        ignoreResultList.add("dom/xhtml/level3/core/nodegetbaseuri17.xhtml");
132        ignoreResultList.add("dom/xhtml/level3/core/nodegetbaseuri18.xhtml");
133        ignoreResultList.add("dom/xhtml/level3/core/nodelookupnamespaceuri01.xhtml");
134        ignoreResultList.add("dom/xhtml/level3/core/nodelookupprefix19.xhtml");
135
136        // TODO: These need to be triaged
137        ignoreResultList.add("fast/css/case-transform.html"); // will not fix #619707
138        ignoreResultList.add("fast/dom/Element/offsetLeft-offsetTop-body-quirk.html"); // different screen size result in extra spaces in Apple compared to us
139        ignoreResultList.add("fast/dom/Window/Plug-ins.html"); // need test plugin
140        ignoreResultList.add("fast/dom/Window/window-screen-properties.html"); // pixel depth
141        ignoreResultList.add("fast/dom/Window/window-xy-properties.html"); // requires eventSender.mouseDown(),mouseUp()
142        ignoreResultList.add("fast/dom/attribute-namespaces-get-set.html"); // http://b/733229
143        ignoreResultList.add("fast/dom/object-embed-plugin-scripting.html"); // dynamic plugins not supported
144        ignoreResultList.add("fast/dom/tabindex-clamp.html"); // there is extra spacing in the file due to multiple input boxes fitting on one line on Apple, ours are wrapped. Space at line ends are stripped.
145        ignoreResultList.add("fast/events/anchor-image-scrolled-x-y.html"); // requires eventSender.mouseDown(),mouseUp()
146        ignoreResultList.add("fast/events/arrow-navigation.html"); // http://b/735233
147        ignoreResultList.add("fast/events/capture-on-target.html"); // requires eventSender.mouseDown(),mouseUp()
148        ignoreResultList.add("fast/events/dblclick-addEventListener.html"); // requires eventSender.mouseDown(),mouseUp()
149        ignoreResultList.add("fast/events/drag-in-frames.html"); // requires eventSender.mouseDown(),mouseUp()
150        ignoreResultList.add("fast/events/drag-outside-window.html"); // requires eventSender.mouseDown(),mouseUp()
151        ignoreResultList.add("fast/events/event-view-toString.html"); // requires eventSender.mouseDown(),mouseUp()
152        ignoreResultList.add("fast/events/frame-click-focus.html"); // requires eventSender.mouseDown(),mouseUp()
153        ignoreResultList.add("fast/events/frame-tab-focus.html"); // http://b/734308
154        ignoreResultList.add("fast/events/iframe-object-onload.html"); // there is extra spacing in the file due to multiple frame boxes fitting on one line on Apple, ours are wrapped. Space at line ends are stripped.
155        ignoreResultList.add("fast/events/input-image-scrolled-x-y.html"); // requires eventSender.mouseDown(),mouseUp()
156        ignoreResultList.add("fast/events/mouseclick-target-and-positioning.html"); // requires eventSender.mouseDown(),mouseUp()
157        ignoreResultList.add("fast/events/mouseover-mouseout.html"); // requires eventSender.mouseDown(),mouseUp()
158        ignoreResultList.add("fast/events/mouseover-mouseout2.html"); // requires eventSender.mouseDown(),mouseUp()
159        ignoreResultList.add("fast/events/mouseup-outside-button.html"); // requires eventSender.mouseDown(),mouseUp()
160        ignoreResultList.add("fast/events/mouseup-outside-document.html"); // requires eventSender.mouseDown(),mouseUp()
161        ignoreResultList.add("fast/events/onclick-list-marker.html"); // requires eventSender.mouseDown(),mouseUp()
162        ignoreResultList.add("fast/events/ondragenter.html"); // requires eventSender.mouseDown(),mouseUp()
163        ignoreResultList.add("fast/events/onload-webkit-before-webcore.html"); // missing space in textrun, ok as text is wrapped. ignore. #714933
164        ignoreResultList.add("fast/events/option-tab.html"); // http://b/734308
165        ignoreResultList.add("fast/events/window-events-bubble.html"); // requires eventSender.mouseDown(),mouseUp()
166        ignoreResultList.add("fast/events/window-events-bubble2.html"); // requires eventSender.mouseDown(),mouseUp()
167        ignoreResultList.add("fast/events/window-events-capture.html"); // requires eventSender.mouseDown(),mouseUp()
168        ignoreResultList.add("fast/forms/drag-into-textarea.html"); // requires eventSender.mouseDown(),mouseUp()
169        ignoreResultList.add("fast/forms/focus-control-to-page.html"); // http://b/716638
170        ignoreResultList.add("fast/forms/focus2.html"); // http://b/735111
171        ignoreResultList.add("fast/forms/form-data-encoding-2.html"); // charset convert. #516936 ignore, won't fix
172        ignoreResultList.add("fast/forms/form-data-encoding.html"); // charset convert. #516936 ignore, won't fix
173        ignoreResultList.add("fast/forms/input-appearance-maxlength.html"); // execCommand "insertText" not supported
174        ignoreResultList.add("fast/forms/input-select-on-click.html"); // requires eventSender.mouseDown(),mouseUp()
175        ignoreResultList.add("fast/forms/listbox-onchange.html"); // requires eventSender.mouseDown(),mouseUp()
176        ignoreResultList.add("fast/forms/listbox-selection.html"); // http://b/735116
177        ignoreResultList.add("fast/forms/onselect-textarea.html"); // requires eventSender.mouseMoveTo, mouseDown & mouseUp and abs. position of mouse to select a word. ignore, won't fix #716583
178        ignoreResultList.add("fast/forms/onselect-textfield.html"); // requires eventSender.mouseMoveTo, mouseDown & mouseUp and abs. position of mouse to select a word. ignore, won't fix #716583
179        ignoreResultList.add("fast/forms/plaintext-mode-1.html"); // not implemented queryCommandEnabled:BackColor, Undo & Redo
180        ignoreResultList.add("fast/forms/search-cancel-button-mouseup.html"); // requires eventSender.mouseDown(),mouseUp()
181        ignoreResultList.add("fast/forms/search-event-delay.html"); // http://b/735120
182        ignoreResultList.add("fast/forms/select-empty-list.html"); // requires eventSender.mouseDown(),mouseUp()
183        ignoreResultList.add("fast/forms/select-type-ahead-non-latin.html"); // http://b/735244
184        ignoreResultList.add("fast/forms/selected-index-assert.html"); // not capturing the console messages
185        ignoreResultList.add("fast/forms/selection-functions.html"); // there is extra spacing as the text areas and input boxes fit next to each other on Apple, but are wrapped on our screen.
186        ignoreResultList.add("fast/forms/textarea-appearance-wrap.html"); // Our text areas are a little thinner than Apples. Also RTL test failes
187        ignoreResultList.add("fast/forms/textarea-initial-caret-position.html"); // Text selection done differently on our platform. When a inputbox gets focus, the entire block is selected.
188        ignoreResultList.add("fast/forms/textarea-no-scroll-on-blur.html"); // Text selection done differently on our platform. When a inputbox gets focus, the entire block is selected.
189        ignoreResultList.add("fast/forms/textarea-paste-newline.html"); // Copy&Paste commands not supported
190        ignoreResultList.add("fast/forms/textarea-scrolled-endline-caret.html"); // requires eventSender.mouseDown(),mouseUp()
191        ignoreResultList.add("fast/frames/iframe-window-focus.html"); // http://b/735140
192        ignoreResultList.add("fast/frames/frameElement-widthheight.html"); // screen width&height are different
193        ignoreResultList.add("fast/frames/frame-js-url-clientWidth.html"); // screen width&height are different
194        ignoreResultList.add("fast/html/tab-order.html"); // http://b/719289
195        ignoreResultList.add("fast/js/navigator-mimeTypes-length.html"); // dynamic plugins not supported
196        ignoreResultList.add("fast/js/string-capitalization.html"); // http://b/516936
197        ignoreResultList.add("fast/loader/local-JavaScript-from-local.html"); // Requires LayoutTests to exist at /tmp/LayoutTests
198        ignoreResultList.add("fast/loader/local-iFrame-source-from-local.html"); // Requires LayoutTests to exist at /tmp/LayoutTests
199        ignoreResultList.add("fast/loader/opaque-base-url.html"); // extra spacing because iFrames rendered next to each other on Apple
200        ignoreResultList.add("fast/overflow/scroll-vertical-not-horizontal.html"); // http://b/735196
201        ignoreResultList.add("fast/parser/script-tag-with-trailing-slash.html"); // not capturing the console messages
202        ignoreResultList.add("fast/replaced/image-map.html"); // requires eventSender.mouseDown(),mouseUp()
203        ignoreResultList.add("fast/text/plain-text-line-breaks.html"); // extra spacing because iFrames rendered next to each other on Apple
204        ignoreResultList.add("profiler"); // profiler is not supported
205    }
206
207}
208