dc59f8fc55ea8872eed9861b9887b6444d0b15be
[WebKit-https.git] / Websites / browserbench.org / Speedometer2.0 / resources / tests.js
1 var numberOfItemsToAdd = 100;
2 var Suites = [];
3 var ENTER_KEY_CODE = 13;
4
5 var triggerEnter = function (element, type) {
6     var event = document.createEvent('Events');
7     event.initEvent(type, true, true);
8     event.keyCode = ENTER_KEY_CODE;
9     event.which = ENTER_KEY_CODE;
10     event.key = 'ENTER';
11     element.dispatchEvent(event);
12 }
13
14 Suites.push({
15     name: 'VanillaJS-TodoMVC',
16     url: 'todomvc/vanilla-examples/vanillajs/index.html',
17     prepare: function (runner, contentWindow, contentDocument) {
18         return runner.waitForElement('.new-todo').then(function (element) {
19             element.focus();
20             return element;
21         });
22     },
23     tests: [
24         new BenchmarkTestStep('Adding' + numberOfItemsToAdd + 'Items', function (newTodo, contentWindow, contentDocument) {
25             for (var i = 0; i < numberOfItemsToAdd; i++) {
26                 newTodo.value = 'Something to do ' + i;
27                 newTodo.dispatchEvent(new Event('change'));
28                 triggerEnter(newTodo, 'keypress');
29             }
30         }),
31         new BenchmarkTestStep('CompletingAllItems', function (newTodo, contentWindow, contentDocument) {
32             var checkboxes = contentDocument.querySelectorAll('.toggle');
33             for (var i = 0; i < checkboxes.length; i++)
34                 checkboxes[i].click();
35         }),
36         new BenchmarkTestStep('DeletingAllItems', function (newTodo, contentWindow, contentDocument) {
37             var deleteButtons = contentDocument.querySelectorAll('.destroy');
38             for (var i = 0; i < deleteButtons.length; i++)
39                 deleteButtons[i].click();
40         }),
41     ]
42 });
43
44 Suites.push({
45     name: 'Vanilla-ES2015-TodoMVC',
46     url: 'todomvc/vanilla-examples/es2015/index.html',
47     prepare: function (runner, contentWindow, contentDocument) {
48         return runner.waitForElement('.new-todo').then(function (element) {
49             element.focus();
50             return element;
51         });
52     },
53     tests: [
54         new BenchmarkTestStep('Adding' + numberOfItemsToAdd + 'Items', function (newTodo, contentWindow, contentDocument) {
55             for (var i = 0; i < numberOfItemsToAdd; i++) {
56                 newTodo.value = 'Something to do ' + i;
57                 newTodo.dispatchEvent(new Event('change'));
58                 triggerEnter(newTodo, 'keypress');
59             }
60         }),
61         new BenchmarkTestStep('CompletingAllItems', function (params, contentWindow, contentDocument) {
62             var checkboxes = contentDocument.querySelectorAll('.toggle');
63             for (var i = 0; i < checkboxes.length; i++)
64                 checkboxes[i].click();
65         }),
66         new BenchmarkTestStep('DeletingItems', function (params, contentWindow, contentDocument) {
67             var deleteButtons = contentDocument.querySelectorAll('.destroy');
68             for (var i = 0; i < deleteButtons.length; i++)
69                 deleteButtons[i].click();
70         }),
71     ]
72 });
73
74 Suites.push({
75     name: 'Vanilla-ES2015-Babel-Webpack-TodoMVC',
76     url: 'todomvc/vanilla-examples/es2015-babel-webpack/dist/index.html',
77     prepare: function (runner, contentWindow, contentDocument) {
78         return runner.waitForElement('.new-todo').then(function (element) {
79             element.focus();
80             return element;
81         });
82     },
83     tests: [
84         new BenchmarkTestStep('Adding' + numberOfItemsToAdd + 'Items', function (newTodo, contentWindow, contentDocument) {
85             for (var i = 0; i < numberOfItemsToAdd; i++) {
86                 newTodo.value = 'Something to do ' + i;
87                 newTodo.dispatchEvent(new Event('change'));
88                 triggerEnter(newTodo, 'keypress');
89             }
90         }),
91         new BenchmarkTestStep('CompletingAllItems', function (params, contentWindow, contentDocument) {
92             var checkboxes = contentDocument.querySelectorAll('.toggle');
93             for (var i = 0; i < checkboxes.length; i++)
94                 checkboxes[i].click();
95         }),
96         new BenchmarkTestStep('DeletingItems', function (params, contentWindow, contentDocument) {
97             var deleteButtons = contentDocument.querySelectorAll('.destroy');
98             for (var i = 0; i < deleteButtons.length; i++)
99                 deleteButtons[i].click();
100         }),
101     ]
102 });
103
104 Suites.push({
105     name: 'React-TodoMVC',
106     url: 'todomvc/architecture-examples/react/index.html',
107     prepare: function (runner, contentWindow, contentDocument) {
108         contentWindow.app.Utils.store = function () {}
109         return runner.waitForElement('.new-todo').then(function (element) {
110             element.focus();
111             return element;
112         });
113     },
114     tests: [
115         new BenchmarkTestStep('Adding' + numberOfItemsToAdd + 'Items', function (newTodo, contentWindow, contentDocument) {
116             for (var i = 0; i < numberOfItemsToAdd; i++) {
117                 newTodo.value = 'Something to do ' + i;
118                 newTodo.dispatchEvent(new Event('input', {
119                   bubbles: true,
120                   cancelable: true
121                 }));
122                 triggerEnter(newTodo, 'keydown');
123             }
124         }),
125         new BenchmarkTestStep('CompletingAllItems', function (newTodo, contentWindow, contentDocument) {
126             var checkboxes = contentDocument.querySelectorAll('.toggle');
127             for (var i = 0; i < checkboxes.length; i++)
128                 checkboxes[i].click();
129         }),
130         new BenchmarkTestStep('DeletingAllItems', function (newTodo, contentWindow, contentDocument) {
131             var deleteButtons = contentDocument.querySelectorAll('.destroy');
132             for (var i = 0; i < deleteButtons.length; i++)
133                 deleteButtons[i].click();
134         }),
135     ]
136 });
137
138 Suites.push({
139     name: 'React-Redux-TodoMVC',
140     url: 'todomvc/architecture-examples/react-redux/dist/index.html',
141     prepare: function (runner, contentWindow, contentDocument) {
142         return runner.waitForElement('.new-todo').then(function (element) {
143             element.focus();
144             return element;
145         });
146     },
147     tests: [
148         new BenchmarkTestStep('Adding' + numberOfItemsToAdd + 'Items', function (newTodo, contentWindow, contentDocument) {
149             for (var i = 0; i < numberOfItemsToAdd; i++) {
150                 newTodo.value = 'Something to do ' + i;
151                 triggerEnter(newTodo, 'keydown');
152             }
153         }),
154         new BenchmarkTestStep('CompletingAllItems', function (params, contentWindow, contentDocument) {
155             var checkboxes = contentDocument.querySelectorAll('.toggle');
156             for (var i = 0; i < checkboxes.length; i++)
157                 checkboxes[i].click();
158         }),
159         new BenchmarkTestStep('DeletingItems', function (params, contentWindow, contentDocument) {
160             var deleteButtons = contentDocument.querySelectorAll('.destroy');
161             for (var i = 0; i < deleteButtons.length; i++)
162                 deleteButtons[i].click();
163         }),
164     ]
165 });
166
167 Suites.push({
168     name: 'EmberJS-TodoMVC',
169     url: 'todomvc/architecture-examples/emberjs/index.html',
170     prepare: function (runner, contentWindow, contentDocument) {
171         return runner.waitForElement('#new-todo').then(function (element) {
172             element.focus();
173             return element;
174         });
175     },
176     tests: [
177         new BenchmarkTestStep('Adding' + numberOfItemsToAdd + 'Items', function (newTodo, contentWindow, contentDocument) {
178             for (var i = 0; i < numberOfItemsToAdd; i++) {
179                 newTodo.value = 'Something to do ' + i;
180                 triggerEnter(newTodo, 'keydown');
181             }
182         }),
183         new BenchmarkTestStep('CompletingAllItems', function (params, contentWindow, contentDocument) {
184             var checkboxes = contentDocument.querySelectorAll('.toggle');
185             for (var i = 0; i < checkboxes.length; i++)
186                 checkboxes[i].click();
187         }),
188         new BenchmarkTestStep('DeletingItems', function (params, contentWindow, contentDocument) {
189             var deleteButtons = contentDocument.querySelectorAll('.destroy');
190             for (var i = 0; i < deleteButtons.length; i++)
191                 deleteButtons[i].click();
192         }),
193     ]
194 });
195
196 Suites.push({
197     name: 'BackboneJS-TodoMVC',
198     url: 'todomvc/architecture-examples/backbone/index.html',
199     prepare: function (runner, contentWindow, contentDocument) {
200     contentWindow.Backbone.sync = function () {}
201         return runner.waitForElement('.new-todo').then(function (element) {
202             element.focus();
203             return element;
204         });
205     },
206     tests: [
207         new BenchmarkTestStep('Adding' + numberOfItemsToAdd + 'Items', function (newTodo, contentWindow, contentDocument) {
208             for (var i = 0; i < numberOfItemsToAdd; i++) {
209                 newTodo.value = 'Something to do ' + i;
210                 triggerEnter(newTodo, 'keypress');
211             }
212         }),
213         new BenchmarkTestStep('CompletingAllItems', function (newTodo, contentWindow, contentDocument) {
214             var checkboxes = contentDocument.querySelectorAll('.toggle');
215             for (var i = 0; i < checkboxes.length; i++)
216                 checkboxes[i].click();
217         }),
218         new BenchmarkTestStep('DeletingAllItems', function (newTodo, contentWindow, contentDocument) {
219             var deleteButtons = contentDocument.querySelectorAll('.destroy');
220             for (var i = 0; i < deleteButtons.length; i++)
221                 deleteButtons[i].click();
222         }),
223     ]
224 });
225
226 Suites.push({
227     name: 'AngularJS-TodoMVC',
228     url: 'todomvc/architecture-examples/angularjs/index.html',
229     prepare: function (runner, contentWindow, contentDocument) {
230         return runner.waitForElement('#new-todo').then(function (element) {
231             element.focus();
232             return element;
233         });
234     },
235     tests: [
236         new BenchmarkTestStep('Adding' + numberOfItemsToAdd + 'Items', function (newTodo, contentWindow, contentDocument) {
237             var submitEvent = document.createEvent('Event');
238             submitEvent.initEvent('submit', true, true);
239             var inputEvent = document.createEvent('Event');
240             inputEvent.initEvent('input', true, true);
241             for (var i = 0; i < numberOfItemsToAdd; i++) {
242                 newTodo.value = 'Something to do ' + i;
243                 newTodo.dispatchEvent(inputEvent);
244                 newTodo.form.dispatchEvent(submitEvent);
245             }
246         }),
247         new BenchmarkTestStep('CompletingAllItems', function (newTodo, contentWindow, contentDocument) {
248             var checkboxes = contentDocument.querySelectorAll('.toggle');
249             for (var i = 0; i < checkboxes.length; i++)
250                 checkboxes[i].click();
251         }),
252         new BenchmarkTestStep('DeletingAllItems', function (newTodo, contentWindow, contentDocument) {
253             var deleteButtons = contentDocument.querySelectorAll('.destroy');
254             for (var i = 0; i < deleteButtons.length; i++)
255                 deleteButtons[i].click();
256         }),
257     ]
258 });
259
260 Suites.push({
261     name: 'Angular2-TypeScript-TodoMVC',
262     url: 'todomvc/architecture-examples/angular/dist/index.html',
263     prepare: function (runner, contentWindow, contentDocument) {
264         return runner.waitForElement('.new-todo').then(function (element) {
265             element.focus();
266             return element;
267         });
268     },
269     tests: [
270         new BenchmarkTestStep('Adding' + numberOfItemsToAdd + 'Items', function (newTodo, contentWindow, contentDocument) {
271             for (var i = 0; i < numberOfItemsToAdd; i++) {
272                 newTodo.value = 'Something to do ' + i;
273                 newTodo.dispatchEvent(new Event('input', {
274                   bubbles: true,
275                   cancelable: true
276                 }));
277                 triggerEnter(newTodo, 'keyup');
278             }
279         }),
280         new BenchmarkTestStep('CompletingAllItems', function (params, contentWindow, contentDocument) {
281             var checkboxes = contentDocument.querySelectorAll('.toggle');
282             for (var i = 0; i < checkboxes.length; i++)
283                 checkboxes[i].click();
284         }),
285         new BenchmarkTestStep('DeletingItems', function (params, contentWindow, contentDocument) {
286             var deleteButtons = contentDocument.querySelectorAll('.destroy');
287             for (var i = 0; i < deleteButtons.length; i++)
288                 deleteButtons[i].click();
289         }),
290     ]
291 });
292
293 Suites.push({
294     name: 'VueJS-TodoMVC',
295     url: 'todomvc/architecture-examples/vuejs-cli/dist/index.html',
296     prepare: function (runner, contentWindow, contentDocument) {
297         return runner.waitForElement('.new-todo').then(function (element) {
298             element.focus();
299             return element;
300         });
301     },
302     tests: [
303         new BenchmarkTestStep('Adding' + numberOfItemsToAdd + 'Items', function (newTodo, contentWindow, contentDocument) {
304             for (var i = 0; i < numberOfItemsToAdd; i++) {
305                 newTodo.value = 'Something to do ' + i;
306                 newTodo.dispatchEvent(new Event('input', {
307                   bubbles: true,
308                   cancelable: true
309                 }));
310                 triggerEnter(newTodo, 'keyup');
311             }
312         }),
313         new BenchmarkTestStep('CompletingAllItems', function (newTodo, contentWindow, contentDocument) {
314             var checkboxes = contentDocument.querySelectorAll('.toggle');
315             for (var i = 0; i < checkboxes.length; i++)
316                 checkboxes[i].click();
317         }),
318         new BenchmarkTestStep('DeletingAllItems', function (newTodo, contentWindow, contentDocument) {
319             var deleteButtons = contentDocument.querySelectorAll('.destroy');
320             for (var i = 0; i < deleteButtons.length; i++)
321                 deleteButtons[i].click();
322         }),
323     ]
324 });
325
326 Suites.push({
327     name: 'jQuery-TodoMVC',
328     url: 'todomvc/architecture-examples/jquery/index.html',
329     prepare: function (runner, contentWindow, contentDocument) {
330         return runner.waitForElement('#new-todo').then(function (element) {
331             element.focus();
332             return element;
333         });
334     },
335     tests: [
336         new BenchmarkTestStep('Adding' + numberOfItemsToAdd + 'Items', function (newTodo, contentWindow, contentDocument) {
337             for (var i = 0; i < numberOfItemsToAdd; i++) {
338                 newTodo.value = 'Something to do ' + i;
339                 triggerEnter(newTodo, 'keyup');
340             }
341         }),
342         new BenchmarkTestStep('CompletingAllItems', function (newTodo, contentWindow, contentDocument) {
343             var checkboxes = contentDocument.querySelectorAll('.toggle');
344             for (var i = 0; i < checkboxes.length; i++)
345                 checkboxes[i].click();
346         }),
347         new BenchmarkTestStep('DeletingAllItems', function (newTodo, contentWindow, contentDocument) {
348             var deleteButtons = contentDocument.querySelectorAll('.destroy');
349             for (var i = 0; i < deleteButtons.length; i++)
350                 deleteButtons[i].click();
351         }),
352     ]
353 })
354
355 Suites.push({
356     name: 'Preact-TodoMVC',
357     url: 'todomvc/architecture-examples/preact/dist/index.html',
358     prepare: function (runner, contentWindow, contentDocument) {
359         return runner.waitForElement('.new-todo').then(function (element) {
360             element.focus();
361             return element;
362         });
363     },
364     tests: [
365         new BenchmarkTestStep('Adding' + numberOfItemsToAdd + 'Items', function (newTodo, contentWindow, contentDocument) {
366             for (var i = 0; i < numberOfItemsToAdd; i++) {
367                 newTodo.value = 'Something to do ' + i;
368                 triggerEnter(newTodo, 'keydown');
369             }
370         }),
371         new BenchmarkTestStep('CompletingAllItems', function (params, contentWindow, contentDocument) {
372             var checkboxes = contentDocument.querySelectorAll('.toggle');
373             for (var i = 0; i < checkboxes.length; i++)
374                 checkboxes[i].click();
375         }),
376         new BenchmarkTestStep('DeletingItems', function (params, contentWindow, contentDocument) {
377             var deleteButtons = contentDocument.querySelectorAll('.destroy');
378             for (var i = 0; i < deleteButtons.length; i++)
379                 deleteButtons[i].click();
380         }),
381     ]
382 });
383
384 Suites.push({
385     name: 'Inferno-TodoMVC',
386     url: 'todomvc/architecture-examples/inferno/index.html',
387     prepare: function (runner, contentWindow, contentDocument) {
388         return runner.waitForElement('.new-todo').then(function (element) {
389             element.focus();
390             return element;
391         });
392     },
393     tests: [
394         new BenchmarkTestStep('Adding' + numberOfItemsToAdd + 'Items', function (newTodo, contentWindow, contentDocument) {
395             for (var i = 0; i < numberOfItemsToAdd; i++) {
396                 newTodo.value = 'Something to do ' + i;
397                 newTodo.dispatchEvent(new Event('change', {
398                   bubbles: true,
399                   cancelable: true
400                 }));
401                 triggerEnter(newTodo, 'keydown');
402             }
403         }),
404         new BenchmarkTestStep('CompletingAllItems', function (params, contentWindow, contentDocument) {
405             var checkboxes = contentDocument.querySelectorAll('.toggle');
406             for (var i = 0; i < checkboxes.length; i++)
407                 checkboxes[i].click();
408         }),
409         new BenchmarkTestStep('DeletingItems', function (params, contentWindow, contentDocument) {
410             var deleteButtons = contentDocument.querySelectorAll('.destroy');
411             for (var i = 0; i < deleteButtons.length; i++)
412                 deleteButtons[i].click();
413         }),
414     ]
415 });
416
417 Suites.push({
418     name: 'Elm-TodoMVC',
419     url: 'todomvc/functional-prog-examples/elm/index.html',
420     prepare: function (runner, contentWindow, contentDocument) {
421         return runner.waitForElement('.new-todo').then(function (element) {
422             element.focus();
423             return element;
424         });
425     },
426     tests: [
427         new BenchmarkTestStep('Adding' + numberOfItemsToAdd + 'Items', function (newTodo, contentWindow, contentDocument) {
428             for (var i = 0; i < numberOfItemsToAdd; i++) {
429                 newTodo.value = 'Something to do ' + i;
430                 newTodo.dispatchEvent(new Event('input', {
431                   bubbles: true,
432                   cancelable: true
433                 }));
434                 triggerEnter(newTodo, 'keydown');
435             }
436         }),
437         new BenchmarkTestStep('CompletingAllItems', function (params, contentWindow, contentDocument) {
438             var checkboxes = contentDocument.querySelectorAll('.toggle');
439             for (var i = 0; i < checkboxes.length; i++)
440                 checkboxes[i].click();
441         }),
442         new BenchmarkTestStep('DeletingItems', function (params, contentWindow, contentDocument) {
443             var deleteButtons = contentDocument.querySelectorAll('.destroy');
444             for (var i = 0; i < deleteButtons.length; i++)
445                 deleteButtons[i].click();
446         }),
447     ]
448 });
449
450 Suites.push({
451     name: 'Flight-TodoMVC',
452     url: 'todomvc/dependency-examples/flight/flight/index.html',
453     prepare: function (runner, contentWindow, contentDocument) {
454         return runner.waitForElement('#new-todo').then(function (element) {
455             element.focus();
456             return element;
457         });
458     },
459     tests: [
460         new BenchmarkTestStep('Adding' + numberOfItemsToAdd + 'Items', function (newTodo, contentWindow, contentDocument) {
461             for (var i = 0; i < numberOfItemsToAdd; i++) {
462                 newTodo.value = 'Something to do ' + i;
463                 triggerEnter(newTodo, 'keydown');
464             }
465         }),
466         new BenchmarkTestStep('CompletingAllItems', function (params, contentWindow, contentDocument) {
467             var checkboxes = contentDocument.querySelectorAll('.toggle');
468             for (var i = 0; i < checkboxes.length; i++)
469                 checkboxes[i].click();
470         }),
471         new BenchmarkTestStep('DeletingItems', function (params, contentWindow, contentDocument) {
472             var deleteButtons = contentDocument.querySelectorAll('.destroy');
473             for (var i = 0; i < deleteButtons.length; i++)
474                 deleteButtons[i].click();
475         }),
476     ]
477 });
478
479 var actionCount = 50;
480 Suites.push({
481     disabled: true,
482     name: 'FlightJS-MailClient',
483     url: 'flightjs-example-app/index.html',
484     prepare: function (runner, contentWindow, contentDocument) {
485         return runner.waitForElement('.span8').then(function (element) {
486             element.focus();
487             return element;
488         });
489     },
490     tests: [
491         new BenchmarkTestStep('OpeningTabs' + actionCount + 'Times', function (newTodo, contentWindow, contentDocument) {
492             contentDocument.getElementById('inbox').click();
493             for (var i = 0; i < actionCount; i++) {
494                 contentDocument.getElementById('later').click();
495                 contentDocument.getElementById('sent').click();
496                 contentDocument.getElementById('trash').click();
497                 contentDocument.getElementById('inbox').click();
498             }
499         }),
500         new BenchmarkTestStep('MovingEmails' + actionCount + 'Times', function (newTodo, contentWindow, contentDocument) {
501             contentDocument.getElementById('inbox').click();
502             for (var i = 0; i < actionCount; i++) {
503                 contentDocument.getElementById('mail_2139').click();
504                 contentDocument.getElementById('move_mail').click();
505                 contentDocument.querySelector('#move_to_selector #later').click();
506                 contentDocument.getElementById('later').click();
507                 contentDocument.getElementById('mail_2139').click();
508                 contentDocument.getElementById('move_mail').click();
509                 contentDocument.querySelector('#move_to_selector #trash').click();
510                 contentDocument.getElementById('trash').click();
511                 contentDocument.getElementById('mail_2139').click();
512                 contentDocument.getElementById('move_mail').click();
513                 contentDocument.querySelector('#move_to_selector #inbox').click();
514                 contentDocument.getElementById('inbox').click();
515             }
516         }),
517         new BenchmarkTestStep('Sending' + actionCount + 'NewEmails', function (newTodo, contentWindow, contentDocument) {
518             for (var i = 0; i < actionCount; i++) {
519                 contentDocument.getElementById('new_mail').click();
520                 contentDocument.getElementById('recipient_select').selectedIndex = 1;
521                 var subject = contentDocument.getElementById('compose_subject');
522                 var message = contentDocument.getElementById('compose_message');
523                 subject.focus();
524                 contentWindow.$(subject).trigger('keydown');
525                 contentWindow.$(subject).text('Hello');
526                 message.focus();
527                 contentWindow.$(message).trigger('keydown');
528                 contentWindow.$(message).text('Hello,\n\nThis is a test message.\n\n- WebKitten');
529                 contentDocument.getElementById('send_composed').click();
530             }
531         }),
532     ]
533 });