Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Tools / GardeningServer / scripts / summary-mock.js
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
28 function minutesAgo(minutes)
29 {
30     var time = new Date();
31     time.setMinutes(time.getMinutes() - minutes);
32     return time;
33 }
34
35 function Cycler(items, repeat)
36 {
37     this._index = 0;
38     this._repeat = repeat || 1;
39     this._repeated = 0;
40     this._items = items;
41 }
42
43 Cycler.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
67 var people = new Cycler([
68     'Eustace Bagge',
69     'Dick Dastardly',
70     'Major Glory',
71     'Barney Rubble',
72     'Bunny Bravo',
73     'Race Bannon',
74 ]);
75
76 var 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
86 var 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
99 var builders = new Cycler(Object.keys(config.builders), 3);
100
101 var expectations = new Cycler([
102     'TEXT',
103     'IMAGE+TEXT',
104     'TIMEOUT',
105     'CRASH'
106 ], 4);
107
108 function 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
116 var currentRevision = 66666;
117 var currentMinutesAgo = 0;
118
119 function 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
138 function 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 })();