• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 *    notice, this list of conditions and the following disclaimer in the
11 *    documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26(function() {
27
28function minutesAgo(minutes)
29{
30    var time = new Date();
31    time.setMinutes(time.getMinutes() - minutes);
32    return time;
33}
34
35function Cycler(items, repeat)
36{
37    this._index = 0;
38    this._repeat = repeat || 1;
39    this._repeated = 0;
40    this._items = items;
41}
42
43Cycler.prototype = {
44    _updateRepeat: function()
45    {
46        if (++this._repeated >= this._repeat) {
47            this._repeated = this._repeat;
48            return false;
49        }
50        return true;
51    },
52    _updateIndex: function()
53    {
54        if (this._updateRepeat())
55            return;
56        if (++this._index >= this._items.length)
57            this._index = 0;
58    },
59    cycle: function()
60    {
61        var result = this._items[this._index];
62        this._updateIndex();
63        return result;
64    }
65}
66
67var people = new Cycler([
68    'Eustace Bagge',
69    'Dick Dastardly',
70    'Major Glory',
71    'Barney Rubble',
72    'Bunny Bravo',
73    'Race Bannon',
74]);
75
76var bugTitles = new Cycler([
77    'Unreviewed. Chromium rebaselines for r93794. * ...',
78    'Fix build when GCC 4.2 is not installed. * ... ',
79    '[Qt] Unreviewed gardening. * platform/qt/Skipped: Skip new tests until ...',
80    'garden-o-matic needs a way to report where and how tests are failing in ... ',
81    'REGRESSION(r90971): Fix an assertion failure with textarea placeholder. ...',
82    'Incorrect layout of :before and :after content, with display table, ...',
83    ' JSHTMLImageElement (and associated Node) is abandoned when image load is ... '
84]);
85
86var testNames = new Cycler([
87    'fast/ruby/text-emphasis.html',
88    'plugins/destroy-during-npp-new.html',
89    'tables/mozilla/bugs/bug60749.html',
90    'tables/mozilla/bugs/bug51727.html',
91    'tables/mozilla/bugs/bug33855.html',
92    'tables/mozilla/bugs/bug52506.htm',
93    'tables/mozilla/bugs/bug18359.html',
94    'tables/mozilla/bugs/bug46368-1.html',
95    'tables/mozilla/bugs/bug46368-2.html',
96    'tables/mozilla/bugs/bug52505.html'
97]);
98
99var builders = new Cycler(Object.keys(config.builders), 3);
100
101var expectations = new Cycler([
102    'TEXT',
103    'IMAGE+TEXT',
104    'TIMEOUT',
105    'CRASH'
106], 4);
107
108function createResultNodesByBuilder(builderFailureCount)
109{
110    var result = {};
111    for(var i = 0; i < builderFailureCount; ++i)
112        result[builders.cycle()] = { actual: expectations.cycle() };
113    return result;
114}
115
116var currentRevision = 66666;
117var currentMinutesAgo = 0;
118
119function createFailingTestsSummary(commitDataCount, failureAnalysisCount, builderFailureCount)
120{
121    var failingTestsSummary = new ui.notifications.FailingTestsSummary();
122    for (var i = 0; i < commitDataCount; ++i)
123        failingTestsSummary.addCommitData({
124            time: minutesAgo(currentMinutesAgo++),
125            revision: currentRevision++,
126            summary: bugTitles.cycle(),
127            author: people.cycle(),
128            reviewer: people.cycle()
129        });
130    for (var i = 0; i < failureAnalysisCount; ++i)
131        failingTestsSummary.addFailureAnalysis({
132            testName: testNames.cycle(),
133            resultNodesByBuilder: createResultNodesByBuilder(builderFailureCount)
134        });
135    return failingTestsSummary;
136}
137
138function createBuildersFailing(failingBuilderCount)
139{
140    var buildersFailing = new ui.notifications.BuildersFailing();
141    builderNameList = [];
142    for (var i = 0; i < failingBuilderCount; ++i)
143        builderNameList.push(builders.cycle());
144    buildersFailing.setFailingBuilders(builderNameList);
145    return buildersFailing
146}
147
148$(document).ready(function() {
149
150    var actions = new ui.notifications.Stream();
151    document.body.insertBefore(actions, document.body.firstChild);
152
153    // FIXME: This should be an Action object.
154    var button = document.body.insertBefore(document.createElement('button'), document.body.firstChild);
155    button.textContent = 'update';
156
157    actions.add(createFailingTestsSummary(3, 4, 1));
158    actions.add(createFailingTestsSummary(3, 1, 3));
159    actions.add(createFailingTestsSummary(1, 20, 1));
160    actions.add(createBuildersFailing(1));
161    actions.add(createBuildersFailing(8));
162});
163
164})();
165