UNPKG

3.94 kBJavaScriptView Raw
1/*
2 * Copyright 2012 Amadeus s.a.s.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16var ConsoleReport = function (logger, campaign, slowTestThreshold) {
17 this.logger = logger;
18 this.campaign = campaign;
19 this.slowTestThreshold = slowTestThreshold || 0;
20};
21
22var eventTypes = {
23 tasksList: function (event) {
24 this.logger.logInfo("Total %d tasks to be executed.", [this.campaign.remainingTasks]);
25 },
26 campaignFinished: function (event) {
27 this.logger.logInfo("Campaign finished.");
28 },
29 taskIgnored: function (event) {
30 this.logger.logWarn("Skipping %s", [event.name]);
31 },
32 taskFinished: function (event) {
33 var taskId = event.taskId;
34
35 var task = this.campaign.jsonReport.tasks[taskId];
36 var taskName = task.name;
37
38 var browser = this.campaign.tasks[taskId].browser;
39 if (!browser) {
40 // Some tasks are not associated with a browser.
41 // e.g.: if a task is created for an Aria Templates test whose
42 // classpath cannot be found
43 return;
44 }
45 var slaveNumber = String(task.slaveNumber || "-");
46 var browserName = browser.name || "default browser";
47 var browserRemainingTasks = browser.pendingTasks;
48
49 if (task.nbAsserts != null) {
50 var totalRemainingTasks = this.campaign.remainingTasks;
51 var duration = task.duration;
52
53 var msg = "[%s s] [%s] [%s] [%d left, %d total] %s: %d assert(s)";
54 if (task.nbFailures > 0 || task.nbErrors > 0) {
55 msg = task.nbFailures ? (msg + "; " + task.nbFailures + " failed") : msg;
56 msg = task.nbErrors ? (msg + "; " + task.nbErrors + " error(s)") : msg;
57 msg = msg.yellow.bold; // there'll be enough red from the earlier error itself
58 } else if (this.slowTestThreshold && duration > this.slowTestThreshold) {
59 msg = msg.bold.inverse;
60 }
61
62 duration = (duration / 1000).toFixed(2);
63 this.logger.logInfo(msg, [duration, slaveNumber, browserName, browserRemainingTasks, totalRemainingTasks, taskName, task.nbAsserts]);
64 } else {
65 this.logger.logInfo("%s", [taskName]);
66 }
67
68 if (event.restartPlanned) {
69 this.logger.logWarn("%s will be restarted", [taskName]);
70 }
71 if (browserRemainingTasks === 0) {
72 this.logger.logInfo("All tasks finished for browser: ", [browserName]);
73 }
74 },
75 error: function (event) {
76 var name = event.name || "";
77 var method = event.method || "";
78 if (name) {
79 if (method) {
80 name = name + "." + method;
81 }
82 } else {
83 name = event.taskName || "";
84 }
85 var err = event.error || {};
86 var message = err.message || "";
87 if (name) {
88 this.logger.logError("Error in %s: %s", [name, message]);
89 } else {
90 this.logger.logError("Error: %s", [message]);
91 }
92 },
93 serverAttached: function serverAttached(event) {
94 this.logger.logInfo("Server URL: %s", [event.homeURL]);
95 }
96};
97
98ConsoleReport.prototype = {};
99
100ConsoleReport.prototype.addResult = function (event) {
101 var eventName = event.event;
102 var eventHandler = eventTypes[eventName];
103 if (eventHandler) {
104 eventHandler.call(this, event);
105 }
106};
107
108module.exports = ConsoleReport;