| OLD | NEW |
| (Empty) |
| 1 # Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | |
| 2 # Use of this source code is governed by a BSD-style license that can be | |
| 3 # found in the LICENSE file. | |
| 4 | |
| 5 CHROMIUM_WIN = "chromium-win" | |
| 6 CHROMIUM_MAC = "chromium-mac" | |
| 7 CHROMIUM_LINUX = "chromium-linux" | |
| 8 WEBKIT_WIN_TITLE = "WebKit Win" | |
| 9 WEBKIT_MAC_TITLE = "WebKit Mac" | |
| 10 WEBKIT_TITLE = "WebKit" | |
| 11 UNKNOWN = "Unknown" | |
| 12 | |
| 13 EXPECTED_IMAGE_FILE_ENDING = "-expected.png" | |
| 14 ACTUAL_IMAGE_FILE_ENDING = "-actual.png" | |
| 15 UPSTREAM_IMAGE_FILE_ENDING = "-expected-upstream.png" | |
| 16 EXPECTED_TEXT_FILE_ENDING = "-expected.txt" | |
| 17 ACTUAL_TEXT_FILE_ENDING = "-actual.txt" | |
| 18 DIFF_IMAGE_FILE_ENDING = "-diff.png" | |
| 19 DIFF_TEXT_FILE_ENDING = "-diff.txt" | |
| 20 | |
| 21 CHROMIUM_SRC_HOME = "http://src.chromium.org/viewvc/chrome/trunk/src/webkit/" | |
| 22 CHROMIUM_TRAC_HOME = CHROMIUM_SRC_HOME + "data/layout_tests/" | |
| 23 WEBKIT_TRAC_HOME = "http://trac.webkit.org/browser/trunk/LayoutTests/" | |
| 24 WEBKIT_SVN_HOSTNAME = "svn.webkit.org" | |
| 25 THIRD_PARTY = "third_party" | |
| 26 | |
| 27 WEBKIT_PLATFORM_URL_BASE = WEBKIT_TRAC_HOME + "platform" | |
| 28 WEBKIT_LAYOUT_TEST_BASE_URL = "http://svn.webkit.org/repository/webkit/trunk/" | |
| 29 WEBKIT_IMAGE_BASELINE_BASE_URL_WIN = (WEBKIT_LAYOUT_TEST_BASE_URL + | |
| 30 "LayoutTests/platform/win/") | |
| 31 WEBKIT_IMAGE_BASELINE_BASE_URL_MAC = (WEBKIT_LAYOUT_TEST_BASE_URL + | |
| 32 "LayoutTests/platform/mac/") | |
| 33 WEBKIT_TRAC_IMAGE_BASELINE_BASE_URL_MAC = WEBKIT_PLATFORM_URL_BASE + "/mac/" | |
| 34 WEBKIT_TRAC_IMAGE_BASELINE_BASE_URL_WIN = WEBKIT_PLATFORM_URL_BASE + "/win/" | |
| 35 | |
| 36 LAYOUT_TEST_RESULTS_DIR = "layout-test-results" | |
| 37 | |
| 38 FAIL = "FAIL" | |
| 39 TIMEOUT = "TIMEOUT" | |
| 40 CRASH = "CRASH" | |
| 41 PASS = "PASS" | |
| 42 WONTFIX = "WONTFIX" | |
| 43 | |
| 44 | |
| 45 class Failure(object): | |
| 46 """ | |
| 47 This class represents a failure in the test output, and is | |
| 48 intended as a data model object. | |
| 49 """ | |
| 50 | |
| 51 def __init__(self): | |
| 52 self.platform = "" | |
| 53 self.test_path = "" | |
| 54 self.text_diff_mismatch = False | |
| 55 self.image_mismatch = False | |
| 56 self.timeout = False | |
| 57 self.crashed = False | |
| 58 self.text_baseline_url = "" | |
| 59 self.image_baseline_url = "" | |
| 60 self.text_baseline_age = "" | |
| 61 self.image_baseline_age = "" | |
| 62 self.test_age = "" | |
| 63 self.text_baseline_local = "" | |
| 64 self.image_baseline_local = "" | |
| 65 self.text_actual_local = "" | |
| 66 self.image_actual_local = "" | |
| 67 self.image_baseline_upstream_url = "" | |
| 68 self.image_baseline_upstream_local = "" | |
| 69 self.test_expectations_line = "" | |
| 70 self.flakiness = 0 | |
| 71 | |
| 72 def GetExpectedImageFilename(self): | |
| 73 return self._RenameEndOfTestPath(EXPECTED_IMAGE_FILE_ENDING) | |
| 74 | |
| 75 def GetActualImageFilename(self): | |
| 76 return self._RenameEndOfTestPath(ACTUAL_IMAGE_FILE_ENDING) | |
| 77 | |
| 78 def GetExpectedTextFilename(self): | |
| 79 return self._RenameEndOfTestPath(EXPECTED_TEXT_FILE_ENDING) | |
| 80 | |
| 81 def GetActualTextFilename(self): | |
| 82 return self._RenameEndOfTestPath(ACTUAL_TEXT_FILE_ENDING) | |
| 83 | |
| 84 def GetImageDiffFilename(self): | |
| 85 return self._RenameEndOfTestPath(DIFF_IMAGE_FILE_ENDING) | |
| 86 | |
| 87 def GetTextDiffFilename(self): | |
| 88 return self._RenameEndOfTestPath(DIFF_TEXT_FILE_ENDING) | |
| 89 | |
| 90 def GetImageUpstreamFilename(self): | |
| 91 return self._RenameEndOfTestPath(UPSTREAM_IMAGE_FILE_ENDING) | |
| 92 | |
| 93 def _RenameEndOfTestPath(self, suffix): | |
| 94 last_index = self.test_path.rfind(".") | |
| 95 if last_index == -1: | |
| 96 return self.test_path | |
| 97 return self.test_path[0:last_index] + suffix | |
| 98 | |
| 99 def GetTestHome(self): | |
| 100 if self.test_path.startswith("chrome"): | |
| 101 return CHROMIUM_TRAC_HOME + self.test_path | |
| 102 return WEBKIT_TRAC_HOME + self.test_path | |
| 103 | |
| 104 def GetImageBaselineTracHome(self): | |
| 105 if self.IsImageBaselineInWebkit(): | |
| 106 return self._GetTracHome(self.image_baseline_url) | |
| 107 return self.image_baseline_url | |
| 108 | |
| 109 def GetTextBaselineTracHome(self): | |
| 110 if self.text_baseline_url and self.IsTextBaselineInWebkit(): | |
| 111 return self._GetTracHome(self.text_baseline_url) | |
| 112 return self.text_baseline_url | |
| 113 | |
| 114 def _GetTracHome(self, file): | |
| 115 return WEBKIT_TRAC_HOME + file[file.find("LayoutTests"):] | |
| 116 | |
| 117 def GetTextBaselineLocation(self): | |
| 118 return self._GetFileLocation(self.text_baseline_url) | |
| 119 | |
| 120 def GetImageBaselineLocation(self): | |
| 121 return self._GetFileLocation(self.image_baseline_url) | |
| 122 | |
| 123 # TODO(gwilson): Refactor this logic so it can be used by multiple scripts. | |
| 124 # TODO(gwilson): Change this so that it respects the fallback order of | |
| 125 # different platforms. (If platform is mac, the fallback should be | |
| 126 # different.) | |
| 127 | |
| 128 def _GetFileLocation(self, file): | |
| 129 if not file: | |
| 130 return None | |
| 131 if file.find(CHROMIUM_WIN) > -1: | |
| 132 return CHROMIUM_WIN | |
| 133 if file.find(CHROMIUM_MAC) > -1: | |
| 134 return CHROMIUM_MAC | |
| 135 if file.find(CHROMIUM_LINUX) > -1: | |
| 136 return CHROMIUM_LINUX | |
| 137 if file.startswith(WEBKIT_IMAGE_BASELINE_BASE_URL_WIN): | |
| 138 return WEBKIT_WIN_TITLE | |
| 139 if file.startswith(WEBKIT_IMAGE_BASELINE_BASE_URL_MAC): | |
| 140 return WEBKIT_MAC_TITLE | |
| 141 # TODO(gwilson): Add mac-snowleopard, mac-leopard, mac-tiger here. | |
| 142 if file.startswith(WEBKIT_LAYOUT_TEST_BASE_URL): | |
| 143 return WEBKIT_TITLE | |
| 144 return UNKNOWN | |
| 145 | |
| 146 def _IsFileInWebKit(self, file): | |
| 147 return file != None and (file.find(WEBKIT_SVN_HOSTNAME) > -1 or | |
| 148 file.find(THIRD_PARTY) > -1) | |
| 149 | |
| 150 def IsImageBaselineInChromium(self): | |
| 151 return not self.IsImageBaselineInWebkit() | |
| 152 | |
| 153 def IsImageBaselineInWebkit(self): | |
| 154 return self._IsFileInWebKit(self.image_baseline_url) | |
| 155 | |
| 156 def IsTextBaselineInChromium(self): | |
| 157 return not self.IsTextBaselineInWebkit() | |
| 158 | |
| 159 def IsTextBaselineInWebkit(self): | |
| 160 return self._IsFileInWebKit(self.text_baseline_url) | |
| 161 | |
| 162 def GetTextResultLocationInZipFile(self): | |
| 163 return self._GetFileLocationInZipFile(self.GetActualTextFilename()) | |
| 164 | |
| 165 def GetImageResultLocationInZipFile(self): | |
| 166 return self._GetFileLocationInZipFile(self.GetActualImageFilename()) | |
| 167 | |
| 168 def _GetFileLocationInZipFile(self, file): | |
| 169 return "%s/%s" % (LAYOUT_TEST_RESULTS_DIR, file) | |
| 170 | |
| 171 # TODO(gwilson): implement this method. | |
| 172 def GetAllBaselineLocations(self): | |
| 173 return None | |
| 174 | |
| 175 # This method determines whether the test is actually expected to fail, | |
| 176 # in order to know whether to retrieve expected test results for it. | |
| 177 # (test results dont exist for tests expected to fail/crash.) | |
| 178 | |
| 179 def IsExpectedToFail(self): | |
| 180 return self._FindKeywordInExpectations(FAIL) | |
| 181 | |
| 182 def IsExpectedToTimeout(self): | |
| 183 return self._FindKeywordInExpectations(TIMEOUT) | |
| 184 | |
| 185 def IsExpectedToCrash(self): | |
| 186 return self._FindKeywordInExpectations(CRASH) | |
| 187 | |
| 188 def IsExpectedToPass(self): | |
| 189 return self._FindKeywordInExpectations(PASS) | |
| 190 | |
| 191 def IsWontFix(self): | |
| 192 return self._FindKeywordInExpectations(WONTFIX) | |
| 193 | |
| 194 def _FindKeywordInExpectations(self, keyword): | |
| 195 if (not self.test_expectations_line or | |
| 196 len(self.test_expectations_line) == 0): | |
| 197 return False | |
| 198 if self.test_expectations_line.find(keyword) > -1: | |
| 199 return True | |
| 200 return False | |
| OLD | NEW |