oxygen-cli 1.37.8 → 1.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/core/OxygenCore.js +8 -2
- package/build/core/OxygenEvents.js +4 -2
- package/build/lib/cli-util.js +26 -6
- package/build/lib/cli.js +12 -2
- package/build/lib/util.js +2 -2
- package/build/model/suite-result.js +2 -1
- package/build/ox_modules/module-web.js +12 -7
- package/build/ox_reporters/reporter-rp.js +376 -0
- package/build/reporter/ReportAggregator.js +110 -43
- package/build/reporter/ReporterBase.js +2 -2
- package/build/reporter/WebSocketReporter.js +136 -0
- package/build/runners/oxygen/index.js +37 -22
- package/package.json +3 -1
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
require("source-map-support/register");
|
|
9
|
+
|
|
10
|
+
var _socket = require("socket.io");
|
|
11
|
+
|
|
12
|
+
const io = new _socket.Server({
|
|
13
|
+
serveClient: false,
|
|
14
|
+
pingInterval: 10000,
|
|
15
|
+
pingTimeout: 60000,
|
|
16
|
+
maxHttpBufferSize: 256 * 1024 * 1024,
|
|
17
|
+
cookie: true,
|
|
18
|
+
cors: {
|
|
19
|
+
origin: '*'
|
|
20
|
+
},
|
|
21
|
+
transports: ['websocket']
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
class WebSocketReporter {
|
|
25
|
+
constructor(aggregator) {
|
|
26
|
+
this._aggregator = aggregator;
|
|
27
|
+
|
|
28
|
+
this._hookAggregatorEvents();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
startAndWaitForClient(serverPort) {
|
|
32
|
+
io.listen(serverPort);
|
|
33
|
+
return new Promise((resolve, reject) => {
|
|
34
|
+
this._handleServerEvents(resolve);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
stop() {
|
|
39
|
+
if (this._socket) {
|
|
40
|
+
io.close();
|
|
41
|
+
this._socket = undefined;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
_handleServerEvents(resolveWait) {
|
|
46
|
+
const _this = this;
|
|
47
|
+
|
|
48
|
+
io.on('connection', socket => {
|
|
49
|
+
_this._handleSocketEvents(socket);
|
|
50
|
+
|
|
51
|
+
resolveWait();
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
_handleSocketEvents(socket) {
|
|
56
|
+
this._socket = socket;
|
|
57
|
+
socket.on('disconnect', reason => {});
|
|
58
|
+
socket.on('error', err => {
|
|
59
|
+
console.error('Error in Socket:', err);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
_hookAggregatorEvents() {
|
|
64
|
+
this._aggregator.on('runner:start', e => this._handleRunnerStart(e));
|
|
65
|
+
|
|
66
|
+
this._aggregator.on('runner:end', e => this._handleRunnerEnd(e));
|
|
67
|
+
|
|
68
|
+
this._aggregator.on('suite:start', e => this._handleSuiteStart(e));
|
|
69
|
+
|
|
70
|
+
this._aggregator.on('suite:end', e => this._handleSuiteEnd(e));
|
|
71
|
+
|
|
72
|
+
this._aggregator.on('case:start', e => this._handleCaseStart(e));
|
|
73
|
+
|
|
74
|
+
this._aggregator.on('case:end', e => this._handleCaseEnd(e));
|
|
75
|
+
|
|
76
|
+
this._aggregator.on('log', e => this._handleLog(e));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
_handleRunnerStart(event) {
|
|
80
|
+
var _this$_socket;
|
|
81
|
+
|
|
82
|
+
(_this$_socket = this._socket) === null || _this$_socket === void 0 ? void 0 : _this$_socket.emit('runner:start', event);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
_handleRunnerEnd(event) {
|
|
86
|
+
var _this$_socket2;
|
|
87
|
+
|
|
88
|
+
(_this$_socket2 = this._socket) === null || _this$_socket2 === void 0 ? void 0 : _this$_socket2.emit('runner:end', event);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
_handleSuiteStart(event) {
|
|
92
|
+
var _this$_socket3;
|
|
93
|
+
|
|
94
|
+
(_this$_socket3 = this._socket) === null || _this$_socket3 === void 0 ? void 0 : _this$_socket3.emit('suite:start', event);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
_handleSuiteEnd(event) {
|
|
98
|
+
var _this$_socket4;
|
|
99
|
+
|
|
100
|
+
(_this$_socket4 = this._socket) === null || _this$_socket4 === void 0 ? void 0 : _this$_socket4.emit('suite:end', event);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
_handleCaseStart(event) {
|
|
104
|
+
var _this$_socket5;
|
|
105
|
+
|
|
106
|
+
(_this$_socket5 = this._socket) === null || _this$_socket5 === void 0 ? void 0 : _this$_socket5.emit('case:start', event);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
_handleCaseEnd(event) {
|
|
110
|
+
var _this$_socket6;
|
|
111
|
+
|
|
112
|
+
(_this$_socket6 = this._socket) === null || _this$_socket6 === void 0 ? void 0 : _this$_socket6.emit('case:end', event);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
_handleStepStart(event) {
|
|
116
|
+
var _this$_socket7;
|
|
117
|
+
|
|
118
|
+
(_this$_socket7 = this._socket) === null || _this$_socket7 === void 0 ? void 0 : _this$_socket7.emit('step:start', event);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
_handleStepEnd(event) {
|
|
122
|
+
var _this$_socket8;
|
|
123
|
+
|
|
124
|
+
(_this$_socket8 = this._socket) === null || _this$_socket8 === void 0 ? void 0 : _this$_socket8.emit('step:end', event);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
_handleLog(event) {
|
|
128
|
+
var _this$_socket9;
|
|
129
|
+
|
|
130
|
+
(_this$_socket9 = this._socket) === null || _this$_socket9 === void 0 ? void 0 : _this$_socket9.emit('log', event);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
exports.default = WebSocketReporter;
|
|
136
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvcnRlci9XZWJTb2NrZXRSZXBvcnRlci5qcyJdLCJuYW1lcyI6WyJpbyIsIlNlcnZlciIsInNlcnZlQ2xpZW50IiwicGluZ0ludGVydmFsIiwicGluZ1RpbWVvdXQiLCJtYXhIdHRwQnVmZmVyU2l6ZSIsImNvb2tpZSIsImNvcnMiLCJvcmlnaW4iLCJ0cmFuc3BvcnRzIiwiV2ViU29ja2V0UmVwb3J0ZXIiLCJjb25zdHJ1Y3RvciIsImFnZ3JlZ2F0b3IiLCJfYWdncmVnYXRvciIsIl9ob29rQWdncmVnYXRvckV2ZW50cyIsInN0YXJ0QW5kV2FpdEZvckNsaWVudCIsInNlcnZlclBvcnQiLCJsaXN0ZW4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIl9oYW5kbGVTZXJ2ZXJFdmVudHMiLCJzdG9wIiwiX3NvY2tldCIsImNsb3NlIiwidW5kZWZpbmVkIiwicmVzb2x2ZVdhaXQiLCJfdGhpcyIsIm9uIiwic29ja2V0IiwiX2hhbmRsZVNvY2tldEV2ZW50cyIsInJlYXNvbiIsImVyciIsImNvbnNvbGUiLCJlcnJvciIsImUiLCJfaGFuZGxlUnVubmVyU3RhcnQiLCJfaGFuZGxlUnVubmVyRW5kIiwiX2hhbmRsZVN1aXRlU3RhcnQiLCJfaGFuZGxlU3VpdGVFbmQiLCJfaGFuZGxlQ2FzZVN0YXJ0IiwiX2hhbmRsZUNhc2VFbmQiLCJfaGFuZGxlTG9nIiwiZXZlbnQiLCJlbWl0IiwiX2hhbmRsZVN0ZXBTdGFydCIsIl9oYW5kbGVTdGVwRW5kIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFRQTs7QUFFQSxNQUFNQSxFQUFFLEdBQUcsSUFBSUMsY0FBSixDQUFXO0FBQ2xCQyxFQUFBQSxXQUFXLEVBQUUsS0FESztBQUVsQkMsRUFBQUEsWUFBWSxFQUFFLEtBRkk7QUFHbEJDLEVBQUFBLFdBQVcsRUFBRSxLQUhLO0FBSWxCQyxFQUFBQSxpQkFBaUIsRUFBRSxNQUFNLElBQU4sR0FBYSxJQUpkO0FBS2xCQyxFQUFBQSxNQUFNLEVBQUUs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QUFjcUIsSUFBZCxDQUFtQixZQUFuQixFQUFpQ0QsS0FBakM7QUFDSDs7QUFDREwsRUFBQUEsaUJBQWlCLENBQUNLLEtBQUQsRUFBUTtBQUFBOztBQUNyQiwyQkFBS3BCLE9BQUwsa0VBQWNxQixJQUFkLENBQW1CLGFBQW5CLEVBQWtDRCxLQUFsQztBQUNIOztBQUNESixFQUFBQSxlQUFlLENBQUNJLEtBQUQsRUFBUTtBQUFBOztBQUNuQiwyQkFBS3BCLE9BQUwsa0VBQWNxQixJQUFkLENBQW1CLFdBQW5CLEVBQWdDRCxLQUFoQztBQUNIOztBQUNESCxFQUFBQSxnQkFBZ0IsQ0FBQ0csS0FBRCxFQUFRO0FBQUE7O0FBQ3BCLDJCQUFLcEIsT0FBTCxrRUFBY3FCLElBQWQsQ0FBbUIsWUFBbkIsRUFBaUNELEtBQWpDO0FBQ0g7O0FBQ0RGLEVBQUFBLGNBQWMsQ0FBQ0UsS0FBRCxFQUFRO0FBQUE7O0FBQ2xCLDJCQUFLcEIsT0FBTCxrRUFBY3FCLElBQWQsQ0FBbUIsVUFBbkIsRUFBK0JELEtBQS9CO0FBQ0g7O0FBQ0RFLEVBQUFBLGdCQUFnQixDQUFDRixLQUFELEVBQVE7QUFBQTs7QUFDcEIsMkJBQUtwQixPQUFMLGtFQUFjcUIsSUFBZCxDQUFtQixZQUFuQixFQUFpQ0QsS0FBakM7QUFDSDs7QUFDREcsRUFBQUEsY0FBYyxDQUFDSCxLQUFELEVBQVE7QUFBQTs7QUFDbEIsMkJBQUtwQixPQUFMLGtFQUFjcUIsSUFBZCxDQUFtQixVQUFuQixFQUErQkQsS0FBL0I7QUFDSDs7QUFDREQsRUFBQUEsVUFBVSxDQUFDQyxLQUFELEVBQVE7QUFBQTs7QUFDZCwyQkFBS3BCLE9BQUwsa0VBQWNxQixJQUFkLENBQW1CLEtBQW5CLEVBQTBCRCxLQUExQjtBQUNIOztBQW5Fa0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuaW1wb3J0IHsgU2VydmVyIH0gZnJvbSAnc29ja2V0LmlvJztcclxuXHJcbmNvbnN0IGlvID0gbmV3IFNlcnZlcih7XHJcbiAgICBzZXJ2ZUNsaWVudDogZmFsc2UsXHJcbiAgICBwaW5nSW50ZXJ2YWw6IDEwMDAwLFxyXG4gICAgcGluZ1RpbWVvdXQ6IDYwMDAwLFxyXG4gICAgbWF4SHR0cEJ1ZmZlclNpemU6IDI1NiAqIDEwMjQgKiAxMDI0LCAvLyAyNTZNQlxyXG4gICAgY29va2llOiB0cnVlLFxyXG4gICAgY29yczoge1xyXG4gICAgICAgIG9yaWdpbjogJyonLFxyXG4gICAgfSxcclxuICAgIHRyYW5zcG9ydHM6IFsnd2Vic29ja2V0J10sXHJcbn0pO1xyXG4vKlxyXG4gKiBXZWJTb2NrZXQgUmVwb3J0ZXJcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYlNvY2tldFJlcG9ydGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKGFnZ3JlZ2F0b3IpIHtcclxuICAgICAgICB0aGlzLl9hZ2dyZWdhdG9yID0gYWdncmVnYXRvcjtcclxuICAgICAgICB0aGlzLl9ob29rQWdncmVnYXRvckV2ZW50cygpO1xyXG4gICAgfVxyXG4gICAgc3RhcnRBbmRXYWl0Rm9yQ2xpZW50KHNlcnZlclBvcnQpIHtcclxuICAgICAgICBpby5saXN0ZW4oc2VydmVyUG9ydCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5faGFuZGxlU2VydmVyRXZlbnRzKHJlc29sdmUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICBpZiAodGhpcy5fc29ja2V0KSB7XHJcbiAgICAgICAgICAgIGlvLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NvY2tldCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBfaGFuZGxlU2VydmVyRXZlbnRzKHJlc29sdmVXYWl0KSB7XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlvLm9uKCdjb25uZWN0aW9uJywgKHNvY2tldCkgPT4ge1xyXG4gICAgICAgICAgICBfdGhpcy5faGFuZGxlU29ja2V0RXZlbnRzKHNvY2tldCk7XHJcbiAgICAgICAgICAgIHJlc29sdmVXYWl0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfaGFuZGxlU29ja2V0RXZlbnRzKHNvY2tldCkge1xyXG4gICAgICAgIHRoaXMuX3NvY2tldCA9IHNvY2tldDtcclxuICAgICAgICBzb2NrZXQub24oJ2Rpc2Nvbm5lY3QnLCAocmVhc29uKSA9PiB7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc29ja2V0Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gU29ja2V0OicsIGVycik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfaG9va0FnZ3JlZ2F0b3JFdmVudHMoKSB7XHJcbiAgICAgICAgdGhpcy5fYWdncmVnYXRvci5vbigncnVubmVyOnN0YXJ0JywgZSA9PiB0aGlzLl9oYW5kbGVSdW5uZXJTdGFydChlKSk7XHJcbiAgICAgICAgdGhpcy5fYWdncmVnYXRvci5vbigncnVubmVyOmVuZCcsIGUgPT4gdGhpcy5faGFuZGxlUnVubmVyRW5kKGUpKTtcclxuICAgICAgICB0aGlzLl9hZ2dyZWdhdG9yLm9uKCdzdWl0ZTpzdGFydCcsIGUgPT4gdGhpcy5faGFuZGxlU3VpdGVTdGFydChlKSk7XHJcbiAgICAgICAgdGhpcy5fYWdncmVnYXRvci5vbignc3VpdGU6ZW5kJywgZSA9PiB0aGlzLl9oYW5kbGVTdWl0ZUVuZChlKSk7XHJcbiAgICAgICAgdGhpcy5fYWdncmVnYXRvci5vbignY2FzZTpzdGFydCcsIGUgPT4gdGhpcy5faGFuZGxlQ2FzZVN0YXJ0KGUpKTtcclxuICAgICAgICB0aGlzLl9hZ2dyZWdhdG9yLm9uKCdjYXNlOmVuZCcsIGUgPT4gdGhpcy5faGFuZGxlQ2FzZUVuZChlKSk7XHJcbiAgICAgICAgdGhpcy5fYWdncmVnYXRvci5vbignbG9nJywgZSA9PiB0aGlzLl9oYW5kbGVMb2coZSkpO1xyXG4gICAgfVxyXG4gICAgX2hhbmRsZVJ1bm5lclN0YXJ0KGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5fc29ja2V0Py5lbWl0KCdydW5uZXI6c3RhcnQnLCBldmVudCk7XHJcbiAgICB9XHJcbiAgICBfaGFuZGxlUnVubmVyRW5kKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5fc29ja2V0Py5lbWl0KCdydW5uZXI6ZW5kJywgZXZlbnQpO1xyXG4gICAgfVxyXG4gICAgX2hhbmRsZVN1aXRlU3RhcnQoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLl9zb2NrZXQ/LmVtaXQoJ3N1aXRlOnN0YXJ0JywgZXZlbnQpO1xyXG4gICAgfVxyXG4gICAgX2hhbmRsZVN1aXRlRW5kKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5fc29ja2V0Py5lbWl0KCdzdWl0ZTplbmQnLCBldmVudCk7XHJcbiAgICB9XHJcbiAgICBfaGFuZGxlQ2FzZVN0YXJ0KGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5fc29ja2V0Py5lbWl0KCdjYXNlOnN0YXJ0JywgZXZlbnQpO1xyXG4gICAgfVxyXG4gICAgX2hhbmRsZUNhc2VFbmQoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLl9zb2NrZXQ/LmVtaXQoJ2Nhc2U6ZW5kJywgZXZlbnQpO1xyXG4gICAgfVxyXG4gICAgX2hhbmRsZVN0ZXBTdGFydChldmVudCkge1xyXG4gICAgICAgIHRoaXMuX3NvY2tldD8uZW1pdCgnc3RlcDpzdGFydCcsIGV2ZW50KTtcclxuICAgIH1cclxuICAgIF9oYW5kbGVTdGVwRW5kKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5fc29ja2V0Py5lbWl0KCdzdGVwOmVuZCcsIGV2ZW50KTtcclxuICAgIH1cclxuICAgIF9oYW5kbGVMb2coZXZlbnQpIHtcclxuICAgICAgICB0aGlzLl9zb2NrZXQ/LmVtaXQoJ2xvZycsIGV2ZW50KTtcclxuICAgIH1cclxufSJdfQ==
|