| /* |
| * 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)); |
| }); |
| |
| })(); |