OLD | NEW |
---|---|
1 'use strict'; | 1 'use strict'; |
2 | 2 |
3 // Bluetooth UUID constants: | 3 // Bluetooth UUID constants: |
4 // Services: | 4 // Services: |
5 var blocklist_test_service_uuid = "611c954a-263b-4f4a-aab6-01ddb953f985"; | 5 var blocklist_test_service_uuid = "611c954a-263b-4f4a-aab6-01ddb953f985"; |
6 var request_disconnection_service_uuid = "01d7d889-7451-419f-aeb8-d65e7b9277af"; | 6 var request_disconnection_service_uuid = "01d7d889-7451-419f-aeb8-d65e7b9277af"; |
7 // Characteristics: | 7 // Characteristics: |
8 var blocklist_exclude_reads_characteristic_uuid = | 8 var blocklist_exclude_reads_characteristic_uuid = |
9 "bad1c9a2-9a5b-4015-8b60-1579bbbf2135"; | 9 "bad1c9a2-9a5b-4015-8b60-1579bbbf2135"; |
10 var request_disconnection_characteristic_uuid = | 10 var request_disconnection_characteristic_uuid = |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
256 function eventPromise(target, type, options) { | 256 function eventPromise(target, type, options) { |
257 return new Promise(resolve => { | 257 return new Promise(resolve => { |
258 let wrapper = function(event) { | 258 let wrapper = function(event) { |
259 target.removeEventListener(type, wrapper); | 259 target.removeEventListener(type, wrapper); |
260 resolve(event); | 260 resolve(event); |
261 }; | 261 }; |
262 target.addEventListener(type, wrapper, options); | 262 target.addEventListener(type, wrapper, options); |
263 }); | 263 }); |
264 } | 264 } |
265 | 265 |
266 // Creates |num_listeners| promises. Each adds an event listener | |
267 // to object. The promises resolve once the object fires |event| but | |
268 // reject if the event is fired before |object|.|func|() resolves. | |
269 // Returns a promise that fulfills with the result of |object|.|func()| | |
270 // and |event.target.value| of each of the other promises. | |
271 // If |ignore_event_promise_order| is set true, this function will ignore | |
272 // the relative order of the event and the promise; otherwise it will assert | |
273 // the event is triggered after the promise is resolved. | |
274 function assert_event_fires_after_promise(object, func, event, num_listeners, ig nore_event_promise_order) { | |
275 num_listeners = num_listeners !== undefined ? num_listeners : 1; | |
276 | 266 |
277 if (object[func] === undefined) { | 267 |
278 return Promise.reject('Function \'' + func + '\' not available in object.'); | 268 function assert_promise_event_order_(should_be_first, object, func, event, num_l isteners) { |
scheib
2017/04/21 06:32:12
comment the parameters.. especially should_be_firs
ortuno
2017/04/26 05:56:19
Moved the comment here.
| |
279 } | 269 let order = []; |
280 let should_resolve = false; | 270 let event_promises = [] |
281 let event_promises = []; | |
282 for (let i = 0; i < num_listeners; i++) { | 271 for (let i = 0; i < num_listeners; i++) { |
283 event_promises.push(new Promise((resolve, reject) => { | 272 event_promises.push(new Promise(resolve => { |
284 let event_listener = (e) => { | 273 let event_listener = (e) => { |
285 object.removeEventListener(event, event_listener); | 274 object.removeEventListener(event, event_listener); |
286 if (should_resolve || ignore_event_promise_order) { | 275 order.push('event'); |
287 resolve(e.target.value); | 276 resolve(e.target.value); |
288 } else { | 277 } |
289 reject(event + ' was triggered before the promise resolved.'); | |
290 } | |
291 }; | |
292 object.addEventListener(event, event_listener); | 278 object.addEventListener(event, event_listener); |
293 })); | 279 })); |
294 } | 280 } |
295 return object[func]().then(result => { | 281 |
296 should_resolve = true; | 282 let func_promise = object[func]().then(result => { |
297 return Promise.all([result, ...event_promises]); | 283 order.push('promiseresolved'); |
284 return result; | |
298 }); | 285 }); |
286 | |
287 return Promise.all([func_promise, ...event_promises]) | |
288 .then((result) => { | |
289 if (should_be_first !== order[0]) { | |
290 throw should_be_first === 'event' ? | |
291 `'${event}' was fired before promise resolved.` : | |
scheib
2017/04/21 06:32:12
I think the error messages are swapped:
e.g. the c
ortuno
2017/04/26 05:56:19
Fixed.
| |
292 `Promise resolved before '${event}' was fired.`; | |
293 } | |
294 | |
295 if (order[0] !== 'promiseresolved' && | |
296 order[order.length - 1] !== 'promiseresolved') { | |
297 throw 'Promise resolved in between event listeners.'; | |
298 } | |
299 | |
300 return result; | |
301 }); | |
302 } | |
303 | |
304 // Attaches |num_listeners| |event| listeners to |object|. If all events have | |
305 // been fired after the promise resolved, returns a promise that fulfills with | |
306 // the result of |object|.|func()| and |event.target.value| of each of event | |
307 // listeners. Otherwise throws an error. | |
308 function assert_event_fires_after_promise( | |
309 object, func, event, num_listeners=1) { | |
310 return assert_promise_event_order_( | |
311 'promiseresolved', object, func, event, num_listeners); | |
312 } | |
313 | |
314 // Attaches |num_listeners| |event| listeners to |object|. If all events have | |
315 // been fired before the promise resolved, returns a promise that fulfills with | |
316 // the result of |object|.|func()| and |event.target.value| of each of the | |
317 // event listeners. Otherwise throws an error. | |
318 function assert_event_fires_before_promise( | |
319 object, func, event, num_listeners=1) { | |
320 return assert_promise_event_order_( | |
321 'event', object, func, event, num_listeners); | |
299 } | 322 } |
300 | 323 |
301 // Returns a promise that resolves after 100ms unless | 324 // Returns a promise that resolves after 100ms unless |
302 // the the event is fired on the object in which case | 325 // the the event is fired on the object in which case |
303 // the promise rejects. | 326 // the promise rejects. |
304 function assert_no_events(object, event_name) { | 327 function assert_no_events(object, event_name) { |
305 return new Promise((resolve, reject) => { | 328 return new Promise((resolve, reject) => { |
306 let event_listener = (e) => { | 329 let event_listener = (e) => { |
307 object.removeEventListener(event_name, event_listener); | 330 object.removeEventListener(event_name, event_listener); |
308 assert_unreached('Object should not fire an event.'); | 331 assert_unreached('Object should not fire an event.'); |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
390 filters: [{ services: services, name: 'Name' }], | 413 filters: [{ services: services, name: 'Name' }], |
391 optionalServices: ['heart_rate'] | 414 optionalServices: ['heart_rate'] |
392 }, { | 415 }, { |
393 filters: [{ services: services, namePrefix: 'Pre' }], | 416 filters: [{ services: services, namePrefix: 'Pre' }], |
394 optionalServices: ['heart_rate'] | 417 optionalServices: ['heart_rate'] |
395 }, { | 418 }, { |
396 filters: [{ services: services, name: 'Name', namePrefix: 'Pre' }], | 419 filters: [{ services: services, name: 'Name', namePrefix: 'Pre' }], |
397 optionalServices: ['heart_rate'] | 420 optionalServices: ['heart_rate'] |
398 }]; | 421 }]; |
399 } | 422 } |
OLD | NEW |