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
- browser = new BrowserTestRunner(launcher, this.reporter, this.runnerIndex++, this.config);
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
@@ -7,7 +7,7 @@
7
7
  "unittest",
8
8
  "browser"
9
9
  ],
10
- "version": "2.13.0",
10
+ "version": "2.14.0",
11
11
  "author": "Toby Ho <airportyh@gmail.com>",
12
12
  "repository": {
13
13
  "type": "git",
@@ -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, window, io, navigator */
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 = window.addEventListener ?
41
- function(obj, evt, cb) { obj.addEventListener(evt, cb, false); } :
42
- function(obj, evt, cb) { obj.attachEvent('on' + evt, cb); };
43
-
44
- addListener(window, 'message', handleMessage);
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
- init();
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
+ }