1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | var ConsoleReport = function (logger, campaign, slowTestThreshold) {
|
17 | this.logger = logger;
|
18 | this.campaign = campaign;
|
19 | this.slowTestThreshold = slowTestThreshold || 0;
|
20 | };
|
21 |
|
22 | var 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 |
|
41 |
|
42 |
|
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;
|
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 |
|
98 | ConsoleReport.prototype = {};
|
99 |
|
100 | ConsoleReport.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 |
|
108 | module.exports = ConsoleReport;
|