| 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 |