OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 var TestRunner = class { | 5 var TestRunner = class { |
6 constructor(baseURL, log, completeTest, fetch) { | 6 constructor(baseURL, log, completeTest, fetch) { |
7 this._dumpInspectorProtocolMessages = false; | 7 this._dumpInspectorProtocolMessages = false; |
8 this._baseURL = baseURL; | 8 this._baseURL = baseURL; |
9 this._log = log; | 9 this._log = log; |
10 this._completeTest = completeTest; | 10 this._completeTest = completeTest; |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
305 _setupProtocol() { | 305 _setupProtocol() { |
306 return new Proxy({}, { get: (target, agentName, receiver) => new Proxy({}, { | 306 return new Proxy({}, { get: (target, agentName, receiver) => new Proxy({}, { |
307 get: (target, methodName, receiver) => { | 307 get: (target, methodName, receiver) => { |
308 const eventPattern = /^(on(ce)?|off)([A-Z][A-Za-z0-9]+)/; | 308 const eventPattern = /^(on(ce)?|off)([A-Z][A-Za-z0-9]+)/; |
309 var match = eventPattern.exec(methodName); | 309 var match = eventPattern.exec(methodName); |
310 if (!match) | 310 if (!match) |
311 return args => this.sendCommand(`${agentName}.${methodName}`, args ||
{}); | 311 return args => this.sendCommand(`${agentName}.${methodName}`, args ||
{}); |
312 var eventName = match[3]; | 312 var eventName = match[3]; |
313 eventName = eventName.charAt(0).toLowerCase() + eventName.slice(1); | 313 eventName = eventName.charAt(0).toLowerCase() + eventName.slice(1); |
314 if (match[1] === 'once') | 314 if (match[1] === 'once') |
315 return () => this._waitForEvent(`${agentName}.${eventName}`); | 315 return eventMatcher => this._waitForEvent(`${agentName}.${eventName}`,
eventMatcher); |
316 if (match[1] === 'off') | 316 if (match[1] === 'off') |
317 return listener => this._removeEventHandler(`${agentName}.${eventName}
`, listener); | 317 return listener => this._removeEventHandler(`${agentName}.${eventName}
`, listener); |
318 return listener => this._addEventHandler(`${agentName}.${eventName}`, li
stener); | 318 return listener => this._addEventHandler(`${agentName}.${eventName}`, li
stener); |
319 } | 319 } |
320 })}); | 320 })}); |
321 } | 321 } |
322 | 322 |
323 _addEventHandler(eventName, handler) { | 323 _addEventHandler(eventName, handler) { |
324 var handlers = this._eventHandlers.get(eventName) || []; | 324 var handlers = this._eventHandlers.get(eventName) || []; |
325 handlers.push(handler); | 325 handlers.push(handler); |
326 this._eventHandlers.set(eventName, handlers); | 326 this._eventHandlers.set(eventName, handlers); |
327 } | 327 } |
328 | 328 |
329 _removeEventHandler(eventName, handler) { | 329 _removeEventHandler(eventName, handler) { |
330 var handlers = this._eventHandlers.get(eventName) || []; | 330 var handlers = this._eventHandlers.get(eventName) || []; |
331 var index = handlers.indexOf(handler); | 331 var index = handlers.indexOf(handler); |
332 if (index === -1) | 332 if (index === -1) |
333 return; | 333 return; |
334 handlers.splice(index, 1); | 334 handlers.splice(index, 1); |
335 this._eventHandlers.set(eventName, handlers); | 335 this._eventHandlers.set(eventName, handlers); |
336 } | 336 } |
337 | 337 |
338 _waitForEvent(eventName) { | 338 _waitForEvent(eventName, eventMatcher) { |
339 return new Promise(callback => { | 339 return new Promise(callback => { |
340 var handler = result => { | 340 var handler = result => { |
| 341 if (eventMatcher && !eventMatcher(result)) |
| 342 return; |
341 this._removeEventHandler(eventName, handler); | 343 this._removeEventHandler(eventName, handler); |
342 callback(result); | 344 callback(result); |
343 }; | 345 }; |
344 this._addEventHandler(eventName, handler); | 346 this._addEventHandler(eventName, handler); |
345 }); | 347 }); |
346 } | 348 } |
347 }; | 349 }; |
348 | 350 |
349 var DevToolsAPI = {}; | 351 var DevToolsAPI = {}; |
350 DevToolsAPI._requestId = 0; | 352 DevToolsAPI._requestId = 0; |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
474 | 476 |
475 window['onerror'] = (message, source, lineno, colno, error) => { | 477 window['onerror'] = (message, source, lineno, colno, error) => { |
476 DevToolsAPI._log(`${error}\n${error.stack}`); | 478 DevToolsAPI._log(`${error}\n${error.stack}`); |
477 DevToolsAPI._completeTest(); | 479 DevToolsAPI._completeTest(); |
478 }; | 480 }; |
479 | 481 |
480 window.addEventListener('unhandledrejection', e => { | 482 window.addEventListener('unhandledrejection', e => { |
481 DevToolsAPI._log(`Promise rejection: ${e.reason}\n${e.reason ? e.reason.stack
: ''}`); | 483 DevToolsAPI._log(`Promise rejection: ${e.reason}\n${e.reason ? e.reason.stack
: ''}`); |
482 DevToolsAPI._completeTest(); | 484 DevToolsAPI._completeTest(); |
483 }, false); | 485 }, false); |
OLD | NEW |