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 17 package com.android.dumprendertree; 18 19 import java.util.Vector; 20 import android.util.*; 21 22 public 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 "canvas/philip/tests/2d.drawImage.broken.html", // blocks test, http://b/2982500 76 "editing/selection/move-left-right.html", // Causes DumpRenderTree to hang 77 "fast/js/excessive-comma-usage.html", // Tests huge initializer list, causes OOM. 78 "fast/js/regexp-charclass-crash.html", // RegExp is too large, causing OOM 79 "fast/js/regexp-overflow.html", // Result is too large, causing OOM when reading by DRT, http://b/2697589 80 "fast/regex/test1.html", // Causes DumpRenderTree to hang with V8 81 "fast/regex/slow.html", // Causes DumpRenderTree to hang with V8 82 }; 83 84 static void fillIgnoreResultList() { 85 // This first block of tests are for features for which Android 86 // should pass all tests. They are skipped only temporarily. 87 // TODO: Fix these failing tests and remove them from this list. 88 ignoreResultList.add("fast/dom/HTMLKeygenElement/keygen.html"); // Missing layoutTestController.shadowRoot() 89 ignoreResultList.add("fast/dom/Geolocation/window-close-crash.html"); // Missing layoutTestContoller.setCloseRemainingWindowsWhenComplete() 90 ignoreResultList.add("fast/dom/Geolocation/page-reload-cancel-permission-requests.html"); // Missing layoutTestController.numberOfPendingGeolocationPermissionRequests() 91 ignoreResultList.add("fast/dom/HTMLLinkElement/link-and-subresource-test.html"); // Missing layoutTestController.dumpResourceResponseMIMETypes() 92 ignoreResultList.add("fast/dom/HTMLLinkElement/prefetch.html"); // Missing layoutTestController.dumpResourceResponseMIMETypes() 93 ignoreResultList.add("fast/dom/HTMLLinkElement/subresource.html"); // Missing layoutTestController.dumpResourceResponseMIMETypes() 94 ignoreResultList.add("fast/encoding/char-decoding.html"); // fails in Java HTTP stack, see http://b/issue?id=3047156 95 ignoreResultList.add("fast/encoding/hanarei-blog32-fc2-com.html"); // fails in Java HTTP stack, see http://b/issue?id=3046986 96 ignoreResultList.add("fast/encoding/mailto-always-utf-8.html"); // Requires waitForPolicyDelegate(), see http://b/issue?id=3043468 97 ignoreResultList.add("fast/encoding/percent-escaping.html"); // fails in Java HTTP stack, see http://b/issue?id=3046984 98 ignoreResultList.add("http/tests/appcache/empty-manifest.html"); // flaky 99 ignoreResultList.add("http/tests/appcache/fallback.html"); // http://b/issue?id=2713004 100 ignoreResultList.add("http/tests/appcache/foreign-fallback.html"); // Flaky, may be due to DRT, see http://b/3285647 101 ignoreResultList.add("http/tests/appcache/foreign-iframe-main.html"); // flaky - skips states 102 ignoreResultList.add("http/tests/appcache/manifest-with-empty-file.html"); // flaky 103 ignoreResultList.add("http/tests/appcache/origin-quota.html"); // needs clearAllApplicationCaches(), see http://b/issue?id=2944196 104 ignoreResultList.add("storage/database-lock-after-reload.html"); // Succeeds but DumpRenderTree does not read result correctly 105 ignoreResultList.add("storage/hash-change-with-xhr.html"); // Succeeds but DumpRenderTree does not read result correctly 106 ignoreResultList.add("storage/open-database-creation-callback-isolated-world.html"); // Requires layoutTestController.evaluateScriptInIsolatedWorld() 107 ignoreResultList.add("storage/statement-error-callback-isolated-world.html"); // Requires layoutTestController.evaluateScriptInIsolatedWorld() 108 ignoreResultList.add("storage/statement-success-callback-isolated-world.html"); // Requires layoutTestController.evaluateScriptInIsolatedWorld() 109 ignoreResultList.add("storage/storageinfo-query-usage.html"); // Need window.webkitStorageInfo 110 ignoreResultList.add("storage/transaction-callback-isolated-world.html"); // Requires layoutTestController.evaluateScriptInIsolatedWorld() 111 ignoreResultList.add("storage/transaction-error-callback-isolated-world.html"); // Requires layoutTestController.evaluateScriptInIsolatedWorld() 112 ignoreResultList.add("storage/transaction-success-callback-isolated-world.html"); // Requires layoutTestController.evaluateScriptInIsolatedWorld() 113 ignoreResultList.add("storage/domstorage/localstorage/storagetracker/storage-tracker-1-prepare.html"); // Missing layoutTestController.originsWithLocalStorage() 114 ignoreResultList.add("storage/domstorage/localstorage/storagetracker/storage-tracker-2-create.html"); // Missing layoutTestController.originsWithLocalStorage() 115 ignoreResultList.add("storage/domstorage/localstorage/storagetracker/storage-tracker-3-delete-all.html"); // Missing layoutTestController.originsWithLocalStorage() 116 ignoreResultList.add("storage/domstorage/localstorage/storagetracker/storage-tracker-4-create.html"); // Missing layoutTestController.originsWithLocalStorage() 117 ignoreResultList.add("storage/domstorage/localstorage/storagetracker/storage-tracker-5-delete-one.html"); // Missing layoutTestController.originsWithLocalStorage() 118 119 120 // Expected failures due to unsupported features or tests unsuitable for Android. 121 ignoreResultList.add("fast/encoding/char-decoding-mac.html"); // Mac-specific encodings (also marked Won't Fix in Chromium, bug 7388) 122 ignoreResultList.add("fast/encoding/char-encoding-mac.html"); // Mac-specific encodings (also marked Won't Fix in Chromium, bug 7388) 123 ignoreResultList.add("fast/encoding/idn-security.html"); // Mac-specific IDN checks (also marked Won't Fix in Chromium, bug 21814) 124 ignoreResultList.add("fast/events/touch/basic-multi-touch-events.html"); // Requires multi-touch gestures not supported by Android system 125 ignoreResultList.add("fast/events/touch/touch-coords-in-zoom-and-scroll.html"); // Requires eventSender.zoomPageIn(),zoomPageOut() 126 ignoreResultList.add("fast/events/touch/touch-target.html"); // Requires multi-touch gestures not supported by Android system 127 ignoreResultList.add("fast/workers"); // workers not supported 128 ignoreResultList.add("http/tests/cookies/third-party-cookie-relaxing.html"); // We don't support conditional acceptance of third-party cookies 129 ignoreResultList.add("http/tests/eventsource/workers"); // workers not supported 130 ignoreResultList.add("http/tests/workers"); // workers not supported 131 ignoreResultList.add("http/tests/xmlhttprequest/workers"); // workers not supported 132 ignoreResultList.add("storage/domstorage/localstorage/private-browsing-affects-storage.html"); // private browsing not supported 133 ignoreResultList.add("storage/domstorage/sessionstorage/private-browsing-affects-storage.html"); // private browsing not supported 134 ignoreResultList.add("storage/indexeddb"); // indexeddb not supported 135 ignoreResultList.add("storage/private-browsing-noread-nowrite.html"); // private browsing not supported 136 ignoreResultList.add("storage/private-browsing-readonly.html"); // private browsing not supported 137 ignoreResultList.add("websocket/tests/workers"); // workers not supported 138 ignoreResultList.add("dom/xhtml/level2/html/htmldocument04.xhtml"); // /mnt/sdcard on SR uses lowercase filesystem, this test checks filename and is case senstive. 139 ignoreResultList.add("dom/html/level2/html/htmldocument04.html"); // ditto 140 141 // Expected failures due to missing expected results 142 ignoreResultList.add("dom/xhtml/level3/core/canonicalform08.xhtml"); 143 ignoreResultList.add("dom/xhtml/level3/core/canonicalform09.xhtml"); 144 ignoreResultList.add("dom/xhtml/level3/core/documentgetinputencoding03.xhtml"); 145 ignoreResultList.add("dom/xhtml/level3/core/entitygetinputencoding02.xhtml"); 146 ignoreResultList.add("dom/xhtml/level3/core/entitygetxmlversion02.xhtml"); 147 ignoreResultList.add("dom/xhtml/level3/core/nodegetbaseuri05.xhtml"); 148 ignoreResultList.add("dom/xhtml/level3/core/nodegetbaseuri07.xhtml"); 149 ignoreResultList.add("dom/xhtml/level3/core/nodegetbaseuri09.xhtml"); 150 ignoreResultList.add("dom/xhtml/level3/core/nodegetbaseuri10.xhtml"); 151 ignoreResultList.add("dom/xhtml/level3/core/nodegetbaseuri11.xhtml"); 152 ignoreResultList.add("dom/xhtml/level3/core/nodegetbaseuri15.xhtml"); 153 ignoreResultList.add("dom/xhtml/level3/core/nodegetbaseuri17.xhtml"); 154 ignoreResultList.add("dom/xhtml/level3/core/nodegetbaseuri18.xhtml"); 155 ignoreResultList.add("dom/xhtml/level3/core/nodelookupnamespaceuri01.xhtml"); 156 ignoreResultList.add("dom/xhtml/level3/core/nodelookupprefix19.xhtml"); 157 158 // TODO: These need to be triaged 159 ignoreResultList.add("fast/css/case-transform.html"); // will not fix #619707 160 ignoreResultList.add("fast/dom/Element/offsetLeft-offsetTop-body-quirk.html"); // different screen size result in extra spaces in Apple compared to us 161 ignoreResultList.add("fast/dom/Window/Plug-ins.html"); // need test plugin 162 ignoreResultList.add("fast/dom/Window/window-screen-properties.html"); // pixel depth 163 ignoreResultList.add("fast/dom/Window/window-xy-properties.html"); // requires eventSender.mouseDown(),mouseUp() 164 ignoreResultList.add("fast/dom/attribute-namespaces-get-set.html"); // http://b/733229 165 ignoreResultList.add("fast/dom/object-embed-plugin-scripting.html"); // dynamic plugins not supported 166 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. 167 ignoreResultList.add("fast/events/anchor-image-scrolled-x-y.html"); // requires eventSender.mouseDown(),mouseUp() 168 ignoreResultList.add("fast/events/arrow-navigation.html"); // http://b/735233 169 ignoreResultList.add("fast/events/capture-on-target.html"); // requires eventSender.mouseDown(),mouseUp() 170 ignoreResultList.add("fast/events/dblclick-addEventListener.html"); // requires eventSender.mouseDown(),mouseUp() 171 ignoreResultList.add("fast/events/drag-in-frames.html"); // requires eventSender.mouseDown(),mouseUp() 172 ignoreResultList.add("fast/events/drag-outside-window.html"); // requires eventSender.mouseDown(),mouseUp() 173 ignoreResultList.add("fast/events/event-view-toString.html"); // requires eventSender.mouseDown(),mouseUp() 174 ignoreResultList.add("fast/events/frame-click-focus.html"); // requires eventSender.mouseDown(),mouseUp() 175 ignoreResultList.add("fast/events/frame-tab-focus.html"); // http://b/734308 176 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. 177 ignoreResultList.add("fast/events/input-image-scrolled-x-y.html"); // requires eventSender.mouseDown(),mouseUp() 178 ignoreResultList.add("fast/events/mouseclick-target-and-positioning.html"); // requires eventSender.mouseDown(),mouseUp() 179 ignoreResultList.add("fast/events/mouseover-mouseout.html"); // requires eventSender.mouseDown(),mouseUp() 180 ignoreResultList.add("fast/events/mouseover-mouseout2.html"); // requires eventSender.mouseDown(),mouseUp() 181 ignoreResultList.add("fast/events/mouseup-outside-button.html"); // requires eventSender.mouseDown(),mouseUp() 182 ignoreResultList.add("fast/events/mouseup-outside-document.html"); // requires eventSender.mouseDown(),mouseUp() 183 ignoreResultList.add("fast/events/onclick-list-marker.html"); // requires eventSender.mouseDown(),mouseUp() 184 ignoreResultList.add("fast/events/ondragenter.html"); // requires eventSender.mouseDown(),mouseUp() 185 ignoreResultList.add("fast/events/onload-webkit-before-webcore.html"); // missing space in textrun, ok as text is wrapped. ignore. #714933 186 ignoreResultList.add("fast/events/option-tab.html"); // http://b/734308 187 ignoreResultList.add("fast/events/window-events-bubble.html"); // requires eventSender.mouseDown(),mouseUp() 188 ignoreResultList.add("fast/events/window-events-bubble2.html"); // requires eventSender.mouseDown(),mouseUp() 189 ignoreResultList.add("fast/events/window-events-capture.html"); // requires eventSender.mouseDown(),mouseUp() 190 ignoreResultList.add("fast/forms/drag-into-textarea.html"); // requires eventSender.mouseDown(),mouseUp() 191 ignoreResultList.add("fast/forms/focus-control-to-page.html"); // http://b/716638 192 ignoreResultList.add("fast/forms/focus2.html"); // http://b/735111 193 ignoreResultList.add("fast/forms/form-data-encoding-2.html"); // charset convert. #516936 ignore, won't fix 194 ignoreResultList.add("fast/forms/form-data-encoding.html"); // charset convert. #516936 ignore, won't fix 195 ignoreResultList.add("fast/forms/input-appearance-maxlength.html"); // execCommand "insertText" not supported 196 ignoreResultList.add("fast/forms/input-select-on-click.html"); // requires eventSender.mouseDown(),mouseUp() 197 ignoreResultList.add("fast/forms/listbox-onchange.html"); // requires eventSender.mouseDown(),mouseUp() 198 ignoreResultList.add("fast/forms/listbox-selection.html"); // http://b/735116 199 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 200 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 201 ignoreResultList.add("fast/forms/plaintext-mode-1.html"); // not implemented queryCommandEnabled:BackColor, Undo & Redo 202 ignoreResultList.add("fast/forms/search-cancel-button-mouseup.html"); // requires eventSender.mouseDown(),mouseUp() 203 ignoreResultList.add("fast/forms/search-event-delay.html"); // http://b/735120 204 ignoreResultList.add("fast/forms/select-empty-list.html"); // requires eventSender.mouseDown(),mouseUp() 205 ignoreResultList.add("fast/forms/select-type-ahead-non-latin.html"); // http://b/735244 206 ignoreResultList.add("fast/forms/selected-index-assert.html"); // not capturing the console messages 207 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. 208 ignoreResultList.add("fast/forms/textarea-appearance-wrap.html"); // Our text areas are a little thinner than Apples. Also RTL test failes 209 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. 210 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. 211 ignoreResultList.add("fast/forms/textarea-paste-newline.html"); // Copy&Paste commands not supported 212 ignoreResultList.add("fast/forms/textarea-scrolled-endline-caret.html"); // requires eventSender.mouseDown(),mouseUp() 213 ignoreResultList.add("fast/frames/iframe-window-focus.html"); // http://b/735140 214 ignoreResultList.add("fast/frames/frameElement-widthheight.html"); // screen width&height are different 215 ignoreResultList.add("fast/frames/frame-js-url-clientWidth.html"); // screen width&height are different 216 ignoreResultList.add("fast/html/tab-order.html"); // http://b/719289 217 ignoreResultList.add("fast/js/navigator-mimeTypes-length.html"); // dynamic plugins not supported 218 ignoreResultList.add("fast/js/string-capitalization.html"); // http://b/516936 219 ignoreResultList.add("fast/loader/local-JavaScript-from-local.html"); // Requires LayoutTests to exist at /tmp/LayoutTests 220 ignoreResultList.add("fast/loader/local-iFrame-source-from-local.html"); // Requires LayoutTests to exist at /tmp/LayoutTests 221 ignoreResultList.add("fast/loader/opaque-base-url.html"); // extra spacing because iFrames rendered next to each other on Apple 222 ignoreResultList.add("fast/overflow/scroll-vertical-not-horizontal.html"); // http://b/735196 223 ignoreResultList.add("fast/parser/script-tag-with-trailing-slash.html"); // not capturing the console messages 224 ignoreResultList.add("fast/replaced/image-map.html"); // requires eventSender.mouseDown(),mouseUp() 225 ignoreResultList.add("fast/text/plain-text-line-breaks.html"); // extra spacing because iFrames rendered next to each other on Apple 226 ignoreResultList.add("profiler"); // profiler is not supported 227 } 228 229 } 230