initial import
[vuplus_webkit] / Tools / BuildSlaveSupport / build.webkit.org-config / public_html / TestFailures / scripts / ui / notifications_unittests.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 module('ui.notifications');
29
30 test('Notification', 5, function() {
31     var notification = new ui.notifications.Notification();
32     equal(notification.tagName, 'LI');
33     equal(notification.innerHTML, '<div class="how"></div><div class="what"></div>');
34     equal(notification.index(), 0);
35     notification.setIndex(1);
36     equal(notification.index(), 1);
37     // FIXME: Really need to figure out how to mock/test animated removal.
38     ok(notification.dismiss);
39 });
40
41 test('Stream', 11, function() {
42     var stream = new ui.notifications.Stream();
43     equal(stream.tagName, 'OL');
44     equal(stream.className, 'notifications');
45     equal(stream.childElementCount, 0);
46
47     var notification;
48
49     notification = new ui.notifications.Info('-o-matic');
50     notification.setIndex(2);
51     stream.add(notification);
52     equal(stream.childElementCount, 1);
53     equal(stream.textContent, '-o-matic');
54
55     notification = new ui.notifications.Info('garden');
56     notification.setIndex(3);
57     stream.add(notification);
58     equal(stream.childElementCount, 2);
59     equal(stream.textContent, 'garden-o-matic');
60
61     notification = new ui.notifications.Info(' is ');
62     notification.setIndex(1);
63     stream.add(notification);
64     equal(stream.childElementCount, 3);
65     equal(stream.textContent, 'garden-o-matic is ');
66
67     notification = new ui.notifications.Info('awesome!');
68     stream.add(notification);
69     equal(stream.childElementCount, 4);
70     equal(stream.textContent, 'garden-o-matic is awesome!');
71 });
72
73 test('Info', 2, function() {
74     var info = new ui.notifications.Info('info');
75     equal(info.tagName, 'LI');
76     equal(info.innerHTML, '<div class="how"></div><div class="what">info</div>');
77 });
78
79 test('FailingTestGroup', 2, function() {
80     var failingTest = new ui.notifications.FailingTestGroup('test');
81     equal(failingTest.tagName, 'LI');
82     equal(failingTest.innerHTML, 'test');
83 });
84
85 test('SuspiciousCommit', 2, function() {
86     var suspiciousCommit = new ui.notifications.SuspiciousCommit({revision: 1, summary: "summary", author: "author", reviewer: "reviewer"});
87     equal(suspiciousCommit.tagName, 'LI');
88     equal(suspiciousCommit.innerHTML,
89         '<div class="description">' +
90             '<a href="http://trac.webkit.org/changeset/1" target="_blank">1</a>' +
91             '<span class="summary">summary</span>' +
92             '<span class="author">author</span>' +
93             '<span class="reviewer">reviewer</span>' +
94         '</div>' +
95         '<ul class="actions">' +
96             '<li><button class="action" title="Blames this failure on this revision.">Blame</button></li>' +
97             '<li><button class="action" title="Rolls out this revision.">Roll out</button></li>' +
98         '</ul>');
99 });
100
101 test('FailingTestsSummary', 12, function() {
102     var testFailures = new ui.notifications.FailingTestsSummary();
103     equal(testFailures.tagName, 'LI');
104     equal(testFailures.innerHTML,
105         '<div class="how">' +
106             '<time class="relative">Just now</time>' +
107             '<table class="failures">' +
108                 '<thead><tr><td>type</td><td>release</td><td>debug</td></tr></thead>' +
109                 '<tbody><tr class="BUILDING" style="display: none; "><td>BUILDING</td><td></td><td></td></tr></tbody>' +
110             '</table>' +
111         '</div>' +
112         '<div class="what">' +
113             '<div class="problem">' +
114                 '<ul class="effects"></ul>' +
115                 '<ul class="actions">' +
116                     '<li><button class="action default" title="Examine these failures in detail.">Examine</button></li>' +
117                     '<li><button class="action">Rebaseline</button></li>' +
118                     '<li><button class="action">Mark as Expected</button></li>' +
119                 '</ul>' +
120             '</div>' +
121             '<ul class="causes"></ul>' +
122         '</div>');
123     testFailures.addFailureAnalysis({testName: 'test', resultNodesByBuilder: {}});
124     equal(testFailures.index(), 0);
125     equal(testFailures.innerHTML,
126         '<div class="how">' +
127             '<time class="relative">Just now</time>' +
128             '<table class="failures">' +
129                 '<thead><tr><td>type</td><td>release</td><td>debug</td></tr></thead>' +
130                 '<tbody><tr class="BUILDING" style="display: none; "><td>BUILDING</td><td></td><td></td></tr></tbody>' +
131             '</table>' +
132         '</div>' +
133         '<div class="what">' +
134             '<div class="problem">' +
135                 '<ul class="effects">' +
136                     '<li>test</li>' +
137                 '</ul>' +
138                 '<ul class="actions">' +
139                     '<li><button class="action default" title="Examine these failures in detail.">Examine</button></li>' +
140                     '<li><button class="action">Rebaseline</button></li>' +
141                     '<li><button class="action">Mark as Expected</button></li>' +
142                 '</ul>' +
143             '</div>' +
144             '<ul class="causes"></ul>' +
145         '</div>');
146     ok(testFailures.containsFailureAnalysis({testName: 'test'}));
147     ok(!testFailures.containsFailureAnalysis({testName: 'foo'}));
148     testFailures.addFailureAnalysis({testName: 'test'});
149     equal(testFailures.innerHTML,
150         '<div class="how">' +
151             '<time class="relative">Just now</time>' +
152             '<table class="failures">' +
153                 '<thead><tr><td>type</td><td>release</td><td>debug</td></tr></thead>' +
154                 '<tbody><tr class="BUILDING" style="display: none; "><td>BUILDING</td><td></td><td></td></tr></tbody>' +
155             '</table>' +
156         '</div>' +
157         '<div class="what">' +
158             '<div class="problem">' +
159                 '<ul class="effects">' +
160                     '<li>test</li>' +
161                 '</ul>' +
162                 '<ul class="actions">' +
163                     '<li><button class="action default" title="Examine these failures in detail.">Examine</button></li>' +
164                     '<li><button class="action">Rebaseline</button></li>' +
165                     '<li><button class="action">Mark as Expected</button></li>' +
166                 '</ul>' +
167             '</div>' +
168             '<ul class="causes"></ul>' +
169         '</div>');
170     deepEqual(testFailures.testNameList(), ['test']);
171     var time = new Date();
172     time.setMinutes(time.getMinutes() - 10);
173     testFailures.addCommitData({revision: 1, time: time, summary: "summary", author: "author", reviewer: "reviewer"});
174     equal(testFailures.index(), time.getTime());
175     equal(testFailures.innerHTML,
176         '<div class="how">' +
177             '<time class="relative">10 minutes ago</time>' +
178             '<table class="failures">' +
179                 '<thead><tr><td>type</td><td>release</td><td>debug</td></tr></thead>' +
180                 '<tbody><tr class="BUILDING" style="display: none; "><td>BUILDING</td><td></td><td></td></tr></tbody>' +
181             '</table>' +
182         '</div>' +
183         '<div class="what">' +
184             '<div class="problem">' +
185                 '<ul class="effects">' +
186                     '<li>test</li>' +
187                 '</ul>' +
188                 '<ul class="actions">' +
189                     '<li><button class="action default" title="Examine these failures in detail.">Examine</button></li>' +
190                     '<li><button class="action">Rebaseline</button></li>' +
191                     '<li><button class="action">Mark as Expected</button></li>' +
192                 '</ul>' +
193             '</div>' +
194             '<ul class="causes">' +
195                 '<li>' +
196                     '<div class="description">' +
197                         '<a href="http://trac.webkit.org/changeset/1" target="_blank">1</a>' +
198                         '<span class="summary">summary</span>' +
199                         '<span class="author">author</span>' +
200                         '<span class="reviewer">reviewer</span>' +
201                     '</div>' +
202                     '<ul class="actions">' +
203                         '<li><button class="action" title="Blames this failure on this revision.">Blame</button></li>' +
204                         '<li><button class="action" title="Rolls out this revision.">Roll out</button></li>' +
205                     '</ul>' +
206                 '</li>' +
207             '</ul>' +
208         '</div>');
209
210     testFailures.addFailureAnalysis({testName: 'foo', resultNodesByBuilder: {'Webkit Linux (dbg)(1)': { actual: 'TEXT'}}});
211     equal(testFailures.innerHTML,
212         '<div class="how">' +
213             '<time class="relative">10 minutes ago</time>' +
214             '<table class="failures">' +
215                 '<thead><tr><td>type</td><td>release</td><td>debug</td></tr></thead>' +
216                 '<tbody>' +
217                     '<tr class="TEXT">' +
218                         '<td>TEXT</td>' +
219                         '<td></td>' +
220                         '<td><a target="_blank" href="http://build.chromium.org/p/chromium.webkit/waterfall?builder=Webkit+Linux+(dbg)(1)"><span class="architecture">64-bit</span><span class="version">lucid</span></a></td>' +
221                     '</tr>' +
222                     '<tr class="BUILDING" style="display: none; "><td>BUILDING</td><td></td><td></td></tr>' +
223                 '</tbody>' +
224             '</table>' +
225         '</div>' +
226         '<div class="what">' +
227             '<div class="problem">' +
228                 '<ul class="effects">' +
229                     '<li>test</li>' +
230                     '<li>foo</li>' +
231                 '</ul>' +
232                 '<ul class="actions">' +
233                     '<li><button class="action default" title="Examine these failures in detail.">Examine</button></li>' +
234                     '<li><button class="action">Rebaseline</button></li>' +
235                     '<li><button class="action">Mark as Expected</button></li>' +
236                 '</ul>' +
237             '</div>' +
238             '<ul class="causes">' +
239                 '<li>' +
240                     '<div class="description">' +
241                         '<a href="http://trac.webkit.org/changeset/1" target="_blank">1</a>' +
242                         '<span class="summary">summary</span>' +
243                         '<span class="author">author</span>' +
244                         '<span class="reviewer">reviewer</span>' +
245                     '</div>' +
246                     '<ul class="actions">' +
247                         '<li><button class="action" title="Blames this failure on this revision.">Blame</button></li>' +
248                         '<li><button class="action" title="Rolls out this revision.">Roll out</button></li>' +
249                     '</ul>' +
250                 '</li>' +
251             '</ul>' +
252         '</div>');
253
254     testFailures.updateBuilderResults({'Webkit Mac10.5 (CG)': { actual: 'BUILDING'}});
255     equal(testFailures.innerHTML,
256         '<div class="how">' +
257             '<time class="relative">10 minutes ago</time>' +
258             '<table class="failures">' +
259                 '<thead><tr><td>type</td><td>release</td><td>debug</td></tr></thead>' +
260                 '<tbody>' +
261                     '<tr class="TEXT">' +
262                         '<td>TEXT</td>' +
263                         '<td></td>' +
264                         '<td><a target="_blank" href="http://build.chromium.org/p/chromium.webkit/waterfall?builder=Webkit+Linux+(dbg)(1)"><span class="architecture">64-bit</span><span class="version">lucid</span></a></td>' +
265                     '</tr>' +
266                     '<tr class="BUILDING" style="">' +
267                         '<td>BUILDING</td>' +
268                         '<td><a target="_blank" href="http://build.chromium.org/p/chromium.webkit/waterfall?builder=Webkit+Mac10.5+(CG)"><span class="version">leopard</span></a></td>' +
269                         '<td></td>' +
270                     '</tr>' +
271                 '</tbody>' +
272             '</table>' +
273         '</div>' +
274         '<div class="what">' +
275             '<div class="problem">' +
276                 '<ul class="effects">' +
277                     '<li>test</li>' +
278                     '<li>foo</li>' +
279                 '</ul>' +
280                 '<ul class="actions">' +
281                     '<li><button class="action default" title="Examine these failures in detail.">Examine</button></li>' +
282                     '<li><button class="action">Rebaseline</button></li>' +
283                     '<li><button class="action">Mark as Expected</button></li>' +
284                 '</ul>' +
285             '</div>' +
286             '<ul class="causes">' +
287                 '<li>' +
288                     '<div class="description">' +
289                         '<a href="http://trac.webkit.org/changeset/1" target="_blank">1</a>' +
290                         '<span class="summary">summary</span>' +
291                         '<span class="author">author</span>' +
292                         '<span class="reviewer">reviewer</span>' +
293                     '</div>' +
294                     '<ul class="actions">' +
295                         '<li><button class="action" title="Blames this failure on this revision.">Blame</button></li>' +
296                         '<li><button class="action" title="Rolls out this revision.">Roll out</button></li>' +
297                     '</ul>' +
298                 '</li>' +
299             '</ul>' +
300         '</div>');
301 });
302
303 test('FailingTestsSummary (grouping)', 1, function() {
304     var testFailures = new ui.notifications.FailingTestsSummary();
305     testFailures.addFailureAnalysis({testName: 'path/to/test1.html', resultNodesByBuilder: {}});
306     testFailures.addFailureAnalysis({testName: 'path/to/test2.html', resultNodesByBuilder: {}});
307     testFailures.addFailureAnalysis({testName: 'path/to/test3.html', resultNodesByBuilder: {}});
308     testFailures.addFailureAnalysis({testName: 'path/to/test4.html', resultNodesByBuilder: {}});
309     testFailures.addFailureAnalysis({testName: 'path/another/test.html', resultNodesByBuilder: {}});
310     equal(testFailures.innerHTML,
311         '<div class="how">' +
312             '<time class="relative">Just now</time>' +
313             '<table class="failures">' +
314                 '<thead><tr><td>type</td><td>release</td><td>debug</td></tr></thead>' +
315                 '<tbody><tr class="BUILDING" style="display: none; "><td>BUILDING</td><td></td><td></td></tr></tbody>' +
316             '</table>' +
317         '</div>' +
318         '<div class="what">' +
319             '<div class="problem">' +
320                 '<ul class="effects">' +
321                     '<li>path/to (4 tests)</li>' +
322                     '<li>path/another/test.html</li>' +
323                 '</ul>' +
324                 '<ul class="actions">' +
325                     '<li><button class="action default" title="Examine these failures in detail.">Examine</button></li>' +
326                     '<li><button class="action">Rebaseline</button></li>' +
327                     '<li><button class="action">Mark as Expected</button></li>' +
328                 '</ul>' +
329             '</div>' +
330             '<ul class="causes"></ul>' +
331         '</div>');
332
333 });
334
335 test('BuildersFailing', 1, function() {
336     var builderFailing = new ui.notifications.BuildersFailing();
337     builderFailing.setFailingBuilders(['WebKit Linux', 'Webkit Vista']);
338     equal(builderFailing.innerHTML,
339         '<div class="how">' +
340             '<time class="relative">Just now</time>' +
341         '</div>' +
342         '<div class="what">' +
343             '<div class="problem">Build Failed:' +
344                 '<ul class="effects">' +
345                     '<li class="builder-name"><a target="_blank" href="http://build.chromium.org/p/chromium.webkit/waterfall?builder=WebKit+Linux">WebKit Linux</a></li>' +
346                     '<li class="builder-name"><a target="_blank" href="http://build.chromium.org/p/chromium.webkit/waterfall?builder=Webkit+Vista">Vista</a></li>' +
347                 '</ul>' +
348             '</div>' +
349             '<ul class="causes"></ul>' +
350         '</div>');
351 });
352
353 }());