blob: b4948b28c3736f5131dd7f3d9543aa439142084d [file] [log] [blame]
/*
* 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...';
}
});
})();