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 |