| /* |
| * Copyright (C) 2011 Google Inc. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * |
| * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' |
| * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
| * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS |
| * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
| * THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| var ui = ui || {}; |
| ui.failures = ui.failures || {}; |
| |
| (function(){ |
| |
| var kBuildingResult = 'BUILDING'; |
| |
| ui.failures.Builder = base.extends('a', { |
| init: function(builderName, failures) |
| { |
| var platformBuilders = config.currentBuilders(); |
| var configuration = platformBuilders[builderName]; |
| if (configuration) { |
| if (configuration.version) |
| this._addSpan('version', configuration.version); |
| if (configuration.is64bit) |
| this._addSpan('architecture', '64-bit'); |
| this._configuration = configuration; |
| } else |
| this._addSpan('version', builderName); |
| |
| this.className = 'failing-builder'; |
| this.target = '_blank'; |
| this.href = ui.displayURLForBuilder(builderName); |
| if (failures) |
| this._addSpan('failures', ' ' + failures.join(', ')); |
| }, |
| _addSpan: function(className, text) |
| { |
| var span = this.appendChild(document.createElement('span')); |
| span.className = className; |
| span.textContent = text; |
| }, |
| equals: function(configuration) |
| { |
| return this._configuration && this._configuration.is64bit == configuration.is64bit && this._configuration.version == configuration.version; |
| } |
| }); |
| |
| function cellContainsConfiguration(cell, configuration) |
| { |
| return Array.prototype.some.call(cell.children, function(configurationElement) { |
| return configurationElement.equals && configurationElement.equals(configuration); |
| }); |
| } |
| |
| function cellByBuildType(row, configuration) |
| { |
| return row.cells[configuration.debug ? 2 : 1]; |
| } |
| |
| ui.failures.FailureGrid = base.extends('table', { |
| init: function() |
| { |
| this.className = 'failures'; |
| var titles = this.createTHead().insertRow(); |
| titles.insertCell().textContent = 'debug'; |
| titles.insertCell().textContent = 'release'; |
| titles.insertCell().textContent = 'type'; |
| this._body = this.appendChild(document.createElement('tbody')); |
| this._reset(); |
| }, |
| _rowByResult: function(result) |
| { |
| var row = this._resultRows[result]; |
| $(row).show(); |
| if (row) |
| return row; |
| |
| row = this._resultRows[result] = this._body.insertRow(0); |
| row.className = result; |
| row.insertCell(); |
| row.insertCell(); |
| var titleCell = row.insertCell(); |
| titleCell.appendChild(document.createElement('span')).textContent = result; |
| return row; |
| }, |
| update: function(resultsByBuilder) |
| { |
| if (this._pendingReset) |
| this._reset(); |
| |
| if (!resultsByBuilder) |
| return; |
| |
| Object.keys(resultsByBuilder).forEach(function(builderName) { |
| var configuration = config.kPlatforms[config.currentPlatform].builders[builderName]; |
| if (!configuration) |
| throw "Unknown builder name: " + builderName; |
| var row = this._rowByResult(resultsByBuilder[builderName].actual); |
| var cell = cellByBuildType(row, configuration); |
| if (cellContainsConfiguration(cell, configuration)) |
| return; |
| cell.appendChild(new ui.failures.Builder(builderName)); |
| }, this); |
| }, |
| purge: function() |
| { |
| this._pendingReset = true; |
| }, |
| _reset: function() |
| { |
| this._pendingReset = false; |
| this._resultRows = {}; |
| $(this._body).empty(); |
| // Add the BUILDING row eagerly so that it appears last. |
| this._rowByResult(kBuildingResult); |
| $(this._resultRows[kBuildingResult]).hide(); |
| } |
| }); |
| |
| ui.failures.ListItem = base.extends('li', { |
| init: function(groupName, failingTestsList) |
| { |
| this._failingTestsList = failingTestsList; |
| this.appendChild(new ui.actions.List([ |
| new ui.actions.Examine().makeDefault(), |
| ])); |
| var label = this.appendChild(document.createElement('label')) |
| label.textContent = failingTestsList.length == 1 ? failingTestsList[0] : groupName; |
| }, |
| }); |
| |
| ui.failures.List = base.extends('ul', { |
| init: function() |
| { |
| this.className = 'failures'; |
| this.textContent = 'Loading...'; |
| } |
| }); |
| |
| })(); |