OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 var kExpectedImageSuffix = '-expected.png'; | 43 var kExpectedImageSuffix = '-expected.png'; |
44 var kActualImageSuffix = '-actual.png'; | 44 var kActualImageSuffix = '-actual.png'; |
45 var kImageDiffSuffix = '-diff.png'; | 45 var kImageDiffSuffix = '-diff.png'; |
46 var kExpectedAudioSuffix = '-expected.wav'; | 46 var kExpectedAudioSuffix = '-expected.wav'; |
47 var kActualAudioSuffix = '-actual.wav'; | 47 var kActualAudioSuffix = '-actual.wav'; |
48 var kExpectedTextSuffix = '-expected.txt'; | 48 var kExpectedTextSuffix = '-expected.txt'; |
49 var kActualTextSuffix = '-actual.txt'; | 49 var kActualTextSuffix = '-actual.txt'; |
50 var kDiffTextSuffix = '-diff.txt'; | 50 var kDiffTextSuffix = '-diff.txt'; |
51 var kCrashLogSuffix = '-crash-log.txt'; | 51 var kCrashLogSuffix = '-crash-log.txt'; |
52 | 52 |
53 var kPNGExtension = 'png'; | |
54 var kTXTExtension = 'txt'; | |
55 var kWAVExtension = 'wav'; | |
56 | |
57 var kPreferredSuffixOrder = [ | 53 var kPreferredSuffixOrder = [ |
58 kExpectedImageSuffix, | 54 kExpectedImageSuffix, |
59 kActualImageSuffix, | 55 kActualImageSuffix, |
60 kImageDiffSuffix, | 56 kImageDiffSuffix, |
61 kExpectedTextSuffix, | 57 kExpectedTextSuffix, |
62 kActualTextSuffix, | 58 kActualTextSuffix, |
63 kDiffTextSuffix, | 59 kDiffTextSuffix, |
64 kCrashLogSuffix, | 60 kCrashLogSuffix, |
65 kExpectedAudioSuffix, | 61 kExpectedAudioSuffix, |
66 kActualAudioSuffix, | 62 kActualAudioSuffix, |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 // '-expected.html', | 128 // '-expected.html', |
133 // '-expected-mismatch.html', | 129 // '-expected-mismatch.html', |
134 // ... and possibly more. | 130 // ... and possibly more. |
135 break; | 131 break; |
136 } | 132 } |
137 }); | 133 }); |
138 | 134 |
139 return base.uniquifyArray(suffixList); | 135 return base.uniquifyArray(suffixList); |
140 } | 136 } |
141 | 137 |
142 results.failureTypeToExtensionList = function(failureType) | 138 function failureTypeList(failureBlob) |
143 { | |
144 switch(failureType) { | |
145 case IMAGE: | |
146 return [kPNGExtension]; | |
147 case AUDIO: | |
148 return [kWAVExtension]; | |
149 case TEXT: | |
150 return [kTXTExtension]; | |
151 case MISSING: | |
152 case IMAGE_TEXT: | |
153 return [kTXTExtension, kPNGExtension]; | |
154 default: | |
155 // FIXME: Add support for the rest of the result types. | |
156 // '-expected.html', | |
157 // '-expected-mismatch.html', | |
158 // ... and possibly more. | |
159 return []; | |
160 } | |
161 }; | |
162 | |
163 results.failureTypeList = function(failureBlob) | |
164 { | 139 { |
165 return failureBlob.split(' '); | 140 return failureBlob.split(' '); |
166 }; | 141 }; |
167 | 142 |
168 function resultsDirectoryURL(builderName) | 143 function resultsDirectoryURL(builderName) |
169 { | 144 { |
170 if (config.useLocalResults) | 145 if (config.useLocalResults) |
171 return '/localresult?path='; | 146 return '/localresult?path='; |
172 return config.layoutTestResultsURL + '/' + config.resultsDirectoryNameFromBu
ilderName(builderName) + '/results/layout-test-results/'; | 147 return config.layoutTestResultsURL + '/' + config.resultsDirectoryNameFromBu
ilderName(builderName) + '/results/layout-test-results/'; |
173 } | 148 } |
174 | 149 |
175 function resultsDirectoryURLForBuildNumber(builderName, buildNumber) | 150 function resultsDirectoryURLForBuildNumber(builderName, buildNumber) |
176 { | 151 { |
177 return config.layoutTestResultsURL + '/' + config.resultsDirectoryNameFromBu
ilderName(builderName) + '/' + buildNumber + '/' ; | 152 return config.layoutTestResultsURL + '/' + config.resultsDirectoryNameFromBu
ilderName(builderName) + '/' + buildNumber + '/' ; |
178 } | 153 } |
179 | 154 |
180 function resultsSummaryURL(builderName) | 155 function resultsSummaryURL(builderName) |
181 { | 156 { |
182 return resultsDirectoryURL(builderName) + kResultsName; | 157 return resultsDirectoryURL(builderName) + kResultsName; |
183 } | 158 } |
184 | 159 |
185 function resultsSummaryURLForBuildNumber(builderName, buildNumber) | |
186 { | |
187 return resultsDirectoryURLForBuildNumber(builderName, buildNumber) + kResult
sName; | |
188 } | |
189 | |
190 var g_resultsCache = new base.AsynchronousCache(function(key) { | 160 var g_resultsCache = new base.AsynchronousCache(function(key) { |
191 return net.jsonp(key); | 161 return net.jsonp(key); |
192 }); | 162 }); |
193 | 163 |
194 results.ResultAnalyzer = base.extends(Object, { | 164 results.ResultAnalyzer = base.extends(Object, { |
195 init: function(resultNode) | 165 init: function(resultNode) |
196 { | 166 { |
197 this._isUnexpected = resultNode.is_unexpected; | 167 this._isUnexpected = resultNode.is_unexpected; |
198 this._actual = resultNode ? results.failureTypeList(resultNode.actual) :
[]; | 168 this._actual = resultNode ? failureTypeList(resultNode.actual) : []; |
199 this._expected = resultNode ? this._addImpliedExpectations(results.failu
reTypeList(resultNode.expected)) : []; | 169 this._expected = resultNode ? this._addImpliedExpectations(failureTypeLi
st(resultNode.expected)) : []; |
200 }, | 170 }, |
201 _addImpliedExpectations: function(resultsList) | 171 _addImpliedExpectations: function(resultsList) |
202 { | 172 { |
203 if (resultsList.indexOf('FAIL') == -1) | 173 if (resultsList.indexOf('FAIL') == -1) |
204 return resultsList; | 174 return resultsList; |
205 return resultsList.concat(kFailingResults); | 175 return resultsList.concat(kFailingResults); |
206 }, | 176 }, |
207 _hasPass: function(results) | 177 _hasPass: function(results) |
208 { | 178 { |
209 return results.indexOf(PASS) != -1; | 179 return results.indexOf(PASS) != -1; |
(...skipping 15 matching lines...) Expand all Loading... |
225 wontfix: function() | 195 wontfix: function() |
226 { | 196 { |
227 return this._expected.indexOf('WONTFIX') != -1; | 197 return this._expected.indexOf('WONTFIX') != -1; |
228 }, | 198 }, |
229 hasUnexpectedFailures: function() | 199 hasUnexpectedFailures: function() |
230 { | 200 { |
231 return this._isUnexpected; | 201 return this._isUnexpected; |
232 } | 202 } |
233 }); | 203 }); |
234 | 204 |
235 function isExpectedFailure(resultNode) | |
236 { | |
237 var analyzer = new results.ResultAnalyzer(resultNode); | |
238 return !analyzer.hasUnexpectedFailures() && !analyzer.succeeded() && !analyz
er.flaky() && !analyzer.wontfix(); | |
239 } | |
240 | |
241 function isUnexpectedFailure(resultNode) | 205 function isUnexpectedFailure(resultNode) |
242 { | 206 { |
243 var analyzer = new results.ResultAnalyzer(resultNode); | 207 var analyzer = new results.ResultAnalyzer(resultNode); |
244 return analyzer.hasUnexpectedFailures() && !analyzer.succeeded() && !analyze
r.flaky() && !analyzer.wontfix(); | 208 return analyzer.hasUnexpectedFailures() && !analyzer.succeeded() && !analyze
r.flaky() && !analyzer.wontfix(); |
245 } | 209 } |
246 | 210 |
247 function isResultNode(node) | 211 function isResultNode(node) |
248 { | 212 { |
249 return !!node.actual; | 213 return !!node.actual; |
250 } | 214 } |
251 | 215 |
252 results.expectedFailures = function(resultsTree) | |
253 { | |
254 return base.filterTree(resultsTree.tests, isResultNode, isExpectedFailure); | |
255 }; | |
256 | |
257 results.unexpectedFailures = function(resultsTree) | 216 results.unexpectedFailures = function(resultsTree) |
258 { | 217 { |
259 return base.filterTree(resultsTree.tests, isResultNode, isUnexpectedFailure)
; | 218 return base.filterTree(resultsTree.tests, isResultNode, isUnexpectedFailure)
; |
260 }; | 219 }; |
261 | 220 |
262 function resultsByTest(resultsByBuilder, filter) | 221 function resultsByTest(resultsByBuilder, filter) |
263 { | 222 { |
264 var resultsByTest = {}; | 223 var resultsByTest = {}; |
265 | 224 |
266 $.each(resultsByBuilder, function(builderName, resultsTree) { | 225 $.each(resultsByBuilder, function(builderName, resultsTree) { |
267 $.each(filter(resultsTree), function(testName, resultNode) { | 226 $.each(filter(resultsTree), function(testName, resultNode) { |
268 resultsByTest[testName] = resultsByTest[testName] || {}; | 227 resultsByTest[testName] = resultsByTest[testName] || {}; |
269 resultsByTest[testName][builderName] = resultNode; | 228 resultsByTest[testName][builderName] = resultNode; |
270 }); | 229 }); |
271 }); | 230 }); |
272 | 231 |
273 return resultsByTest; | 232 return resultsByTest; |
274 } | 233 } |
275 | 234 |
276 results.expectedFailuresByTest = function(resultsByBuilder) | |
277 { | |
278 return resultsByTest(resultsByBuilder, results.expectedFailures); | |
279 }; | |
280 | |
281 results.unexpectedFailuresByTest = function(resultsByBuilder) | 235 results.unexpectedFailuresByTest = function(resultsByBuilder) |
282 { | 236 { |
283 return resultsByTest(resultsByBuilder, results.unexpectedFailures); | 237 return resultsByTest(resultsByBuilder, results.unexpectedFailures); |
284 }; | 238 }; |
285 | 239 |
286 results.failureInfoForTestAndBuilder = function(resultsByTest, testName, builder
Name) | 240 results.failureInfoForTestAndBuilder = function(resultsByTest, testName, builder
Name) |
287 { | 241 { |
288 var failureInfoForTest = { | 242 var failureInfoForTest = { |
289 'testName': testName, | 243 'testName': testName, |
290 'builderName': builderName, | 244 'builderName': builderName, |
291 'failureTypeList': results.failureTypeList(resultsByTest[testName][build
erName].actual), | 245 'failureTypeList': failureTypeList(resultsByTest[testName][builderName].
actual), |
292 }; | 246 }; |
293 | 247 |
294 return failureInfoForTest; | 248 return failureInfoForTest; |
295 }; | 249 }; |
296 | 250 |
297 results.collectUnexpectedResults = function(dictionaryOfResultNodes) | 251 results.collectUnexpectedResults = function(dictionaryOfResultNodes) |
298 { | 252 { |
299 var collectedResults = []; | 253 var collectedResults = []; |
300 $.each(dictionaryOfResultNodes, function(key, resultNode) { | 254 $.each(dictionaryOfResultNodes, function(key, resultNode) { |
301 var analyzer = new results.ResultAnalyzer(resultNode); | 255 var analyzer = new results.ResultAnalyzer(resultNode); |
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
513 fetchPromises.push(net.jsonp(resultsURL).then(function(resultsTree) { | 467 fetchPromises.push(net.jsonp(resultsURL).then(function(resultsTree) { |
514 resultsByBuilder[builderName] = resultsTree; | 468 resultsByBuilder[builderName] = resultsTree; |
515 })); | 469 })); |
516 }); | 470 }); |
517 return Promise.all(fetchPromises).then(function() { | 471 return Promise.all(fetchPromises).then(function() { |
518 return resultsByBuilder; | 472 return resultsByBuilder; |
519 }); | 473 }); |
520 }; | 474 }; |
521 | 475 |
522 })(); | 476 })(); |
OLD | NEW |