testem 2.13.0 → 2.14.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/lib/app.js
CHANGED
|
@@ -259,7 +259,9 @@ module.exports = class App extends EventEmitter {
|
|
|
259
259
|
id: id,
|
|
260
260
|
protocol: 'browser'
|
|
261
261
|
}, this.config).create();
|
|
262
|
-
|
|
262
|
+
const singleRun = this.config.get('single_run');
|
|
263
|
+
|
|
264
|
+
browser = new BrowserTestRunner(launcher, this.reporter, this.runnerIndex++, singleRun, this.config);
|
|
263
265
|
this.addRunner(browser);
|
|
264
266
|
}
|
|
265
267
|
|
|
@@ -128,6 +128,14 @@ module.exports = class BrowserTestRunner {
|
|
|
128
128
|
socket.on('all-test-results', this.onAllTestResults.bind(this));
|
|
129
129
|
socket.on('after-tests-complete', this.onAfterTests.bind(this));
|
|
130
130
|
|
|
131
|
+
const customBrowserSocketEvents = this.launcher.config.get('custom_browser_socket_events');
|
|
132
|
+
|
|
133
|
+
if (customBrowserSocketEvents) {
|
|
134
|
+
Object.keys(customBrowserSocketEvents).forEach((key) => {
|
|
135
|
+
socket.on(key, customBrowserSocketEvents[key].bind(this));
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
|
|
131
139
|
let tap = new BrowserTapConsumer(socket);
|
|
132
140
|
tap.on('test-result', this.onTestResult.bind(this));
|
|
133
141
|
tap.on('all-test-results', this.onAllTestResults.bind(this));
|
package/package.json
CHANGED
|
@@ -175,6 +175,7 @@ var Testem = {
|
|
|
175
175
|
handler.apply(this, argsWithoutFirst);
|
|
176
176
|
}
|
|
177
177
|
}
|
|
178
|
+
|
|
178
179
|
this.emitMessage.apply(this, arguments);
|
|
179
180
|
},
|
|
180
181
|
on: function(evt, callback) {
|
|
@@ -266,6 +267,11 @@ var Testem = {
|
|
|
266
267
|
case 'stop-run':
|
|
267
268
|
self.emit('after-tests-complete');
|
|
268
269
|
break;
|
|
270
|
+
default:
|
|
271
|
+
if (type.indexOf('testem:') === 0) {
|
|
272
|
+
self.emit(type, message.data);
|
|
273
|
+
}
|
|
274
|
+
break;
|
|
269
275
|
}
|
|
270
276
|
});
|
|
271
277
|
},
|
|
@@ -286,6 +292,21 @@ var Testem = {
|
|
|
286
292
|
// stringify for clients that only can handle string postMessages (IE <= 10)
|
|
287
293
|
return JSON.stringify(message);
|
|
288
294
|
},
|
|
295
|
+
removeEventCallbacks: function(evt, callback) {
|
|
296
|
+
var handlers = this.evtHandlers[evt];
|
|
297
|
+
var removeIdx = [];
|
|
298
|
+
if (typeof handlers === "undefined") {
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
for (var i = 0; i < handlers.length; i++) {
|
|
302
|
+
if (handlers[i] === callback) {
|
|
303
|
+
removeIdx.push(i);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
for (var j = 0; j < removeIdx.length; j++) {
|
|
307
|
+
handlers.splice(j, 1);
|
|
308
|
+
}
|
|
309
|
+
},
|
|
289
310
|
runAfterTests: function() {
|
|
290
311
|
if (Testem.afterTestsQueue.length) {
|
|
291
312
|
var afterTestsCallback = Testem.afterTestsQueue.shift();
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
/* globals document, parent,
|
|
1
|
+
/* globals document, parent, io, window, navigator */
|
|
2
|
+
/* globals module */
|
|
2
3
|
'use strict';
|
|
3
4
|
|
|
4
5
|
var socket;
|
|
@@ -37,11 +38,13 @@ function sendMessageToParent(type, data) {
|
|
|
37
38
|
parent.postMessage(message, '*');
|
|
38
39
|
}
|
|
39
40
|
|
|
40
|
-
var addListener
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
var addListener;
|
|
42
|
+
if (typeof window !== 'undefined') {
|
|
43
|
+
addListener = window.addEventListener ?
|
|
44
|
+
function(obj, evt, cb) { obj.addEventListener(evt, cb, false); } :
|
|
45
|
+
function(obj, evt, cb) { obj.attachEvent('on' + evt, cb); };
|
|
46
|
+
addListener(window, 'message', handleMessage);
|
|
47
|
+
}
|
|
45
48
|
|
|
46
49
|
var messageListeners = {};
|
|
47
50
|
function handleMessage(event) {
|
|
@@ -158,8 +161,21 @@ function init() {
|
|
|
158
161
|
});
|
|
159
162
|
}
|
|
160
163
|
|
|
164
|
+
function patchEmitterForWildcard(socket) {
|
|
165
|
+
var emit = io.Manager.prototype.emit;
|
|
166
|
+
|
|
167
|
+
function onevent (packet) {
|
|
168
|
+
var args = packet.data || [];
|
|
169
|
+
emit.call(this, '*', packet);
|
|
170
|
+
return emit.apply(this, args);
|
|
171
|
+
}
|
|
172
|
+
socket.onevent = onevent;
|
|
173
|
+
}
|
|
174
|
+
|
|
161
175
|
function initSocket(id) {
|
|
162
176
|
socket = io.connect({ reconnectionDelayMax: 1000, randomizationFactor: 0 });
|
|
177
|
+
patchEmitterForWildcard(socket);
|
|
178
|
+
|
|
163
179
|
socket.emit('browser-login', getBrowserName(navigator.userAgent), id);
|
|
164
180
|
socket.on('connect', function() {
|
|
165
181
|
connectStatus = 'connected';
|
|
@@ -176,6 +192,21 @@ function initSocket(id) {
|
|
|
176
192
|
socket.on('stop-run', function() {
|
|
177
193
|
sendMessageToParent('stop-run');
|
|
178
194
|
});
|
|
195
|
+
socket.on('*', function(event) {
|
|
196
|
+
if (event.data && event.data[0].indexOf('testem:') === 0 ) {
|
|
197
|
+
var eventName = event.data[0];
|
|
198
|
+
var eventData = event.data[1];
|
|
199
|
+
sendMessageToParent(eventName, eventData);
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// We should only call init() if it ran in browser.
|
|
205
|
+
if (typeof window !== 'undefined') {
|
|
206
|
+
init();
|
|
179
207
|
}
|
|
180
208
|
|
|
181
|
-
|
|
209
|
+
// Exporting this as a module so that it can be unit tested in Node.
|
|
210
|
+
if (typeof module !== 'undefined') {
|
|
211
|
+
module.exports = patchEmitterForWildcard;
|
|
212
|
+
}
|