blob: eb3c2a2a126b4d52a8b15f00cc9109f1fa99388a [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.
*/
(function() {
function minutesAgo(minutes)
{
var time = new Date();
time.setMinutes(time.getMinutes() - minutes);
return time;
}
function Cycler(items, repeat)
{
this._index = 0;
this._repeat = repeat || 1;
this._repeated = 0;
this._items = items;
}
Cycler.prototype = {
_updateRepeat: function()
{
if (++this._repeated >= this._repeat) {
this._repeated = this._repeat;
return false;
}
return true;
},
_updateIndex: function()
{
if (this._updateRepeat())
return;
if (++this._index >= this._items.length)
this._index = 0;
},
cycle: function()
{
var result = this._items[this._index];
this._updateIndex();
return result;
}
}
var people = new Cycler([
'Eustace Bagge',
'Dick Dastardly',
'Major Glory',
'Barney Rubble',
'Bunny Bravo',
'Race Bannon',
]);
var bugTitles = new Cycler([
'Unreviewed. Chromium rebaselines for r93794. * ...',
'Fix build when GCC 4.2 is not installed. * ... ',
'[Qt] Unreviewed gardening. * platform/qt/Skipped: Skip new tests until ...',
'garden-o-matic needs a way to report where and how tests are failing in ... ',
'REGRESSION(r90971): Fix an assertion failure with textarea placeholder. ...',
'Incorrect layout of :before and :after content, with display table, ...',
' JSHTMLImageElement (and associated Node) is abandoned when image load is ... '
]);
var testNames = new Cycler([
'fast/ruby/text-emphasis.html',
'plugins/destroy-during-npp-new.html',
'tables/mozilla/bugs/bug60749.html',
'tables/mozilla/bugs/bug51727.html',
'tables/mozilla/bugs/bug33855.html',
'tables/mozilla/bugs/bug52506.htm',
'tables/mozilla/bugs/bug18359.html',
'tables/mozilla/bugs/bug46368-1.html',
'tables/mozilla/bugs/bug46368-2.html',
'tables/mozilla/bugs/bug52505.html'
]);
var builders = new Cycler(Object.keys(config.currentBuilders()), 3);
var expectations = new Cycler([
'TEXT',
'IMAGE+TEXT',
'TIMEOUT',
'CRASH'
], 4);
function createResultNodesByBuilder(builderFailureCount)
{
var result = {};
for(var i = 0; i < builderFailureCount; ++i)
result[builders.cycle()] = { actual: expectations.cycle() };
return result;
}
var currentRevision = 66666;
var currentMinutesAgo = 0;
function createFailingTestsSummary(commitDataCount, failureAnalysisCount, builderFailureCount)
{
var failingTestsSummary = new ui.notifications.FailingTestsSummary();
for (var i = 0; i < commitDataCount; ++i)
failingTestsSummary.addCommitData({
time: minutesAgo(currentMinutesAgo++),
revision: currentRevision++,
summary: bugTitles.cycle(),
author: people.cycle(),
reviewer: people.cycle()
});
for (var i = 0; i < failureAnalysisCount; ++i)
failingTestsSummary.addFailureAnalysis({
testName: testNames.cycle(),
resultNodesByBuilder: createResultNodesByBuilder(builderFailureCount)
});
return failingTestsSummary;
}
function createBuildersFailing(failingBuilderCount)
{
var buildersFailing = new ui.notifications.BuildersFailing();
builderNameList = [];
for (var i = 0; i < failingBuilderCount; ++i)
builderNameList.push(builders.cycle());
buildersFailing.setFailingBuilders(builderNameList);
return buildersFailing
}
$(document).ready(function() {
var actions = new ui.notifications.Stream();
document.body.insertBefore(actions, document.body.firstChild);
// FIXME: This should be an Action object.
var button = document.body.insertBefore(document.createElement('button'), document.body.firstChild);
button.textContent = 'update';
actions.add(createFailingTestsSummary(3, 4, 1));
actions.add(createFailingTestsSummary(3, 1, 3));
actions.add(createFailingTestsSummary(1, 20, 1));
actions.add(createBuildersFailing(1));
actions.add(createBuildersFailing(8));
});
})();