| 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 // Helper function to assert that events are fired and a promise resolved |
| 279 } | 269 // in the correct order. |
| 280 let should_resolve = false; | 270 // 'event' should be passed as |should_be_first| to indicate that the events |
| 281 let event_promises = []; | 271 // should be fired first, otherwise 'promiseresolved' should be passed. |
| 272 // Attaches |num_listeners| |event| listeners to |object|. If all events have |
| 273 // been fired and the promise resolved in the correct order, returns a promise |
| 274 // that fulfills with the result of |object|.|func()| and |event.target.value| |
| 275 // of each of event listeners. Otherwise throws an error. |
| 276 function assert_promise_event_order_(should_be_first, object, func, event, num_l
isteners) { |
| 277 let order = []; |
| 278 let event_promises = [] |
| 282 for (let i = 0; i < num_listeners; i++) { | 279 for (let i = 0; i < num_listeners; i++) { |
| 283 event_promises.push(new Promise((resolve, reject) => { | 280 event_promises.push(new Promise(resolve => { |
| 284 let event_listener = (e) => { | 281 let event_listener = (e) => { |
| 285 object.removeEventListener(event, event_listener); | 282 object.removeEventListener(event, event_listener); |
| 286 if (should_resolve || ignore_event_promise_order) { | 283 order.push('event'); |
| 287 resolve(e.target.value); | 284 resolve(e.target.value); |
| 288 } else { | 285 } |
| 289 reject(event + ' was triggered before the promise resolved.'); | |
| 290 } | |
| 291 }; | |
| 292 object.addEventListener(event, event_listener); | 286 object.addEventListener(event, event_listener); |
| 293 })); | 287 })); |
| 294 } | 288 } |
| 295 return object[func]().then(result => { | 289 |
| 296 should_resolve = true; | 290 let func_promise = object[func]().then(result => { |
| 297 return Promise.all([result, ...event_promises]); | 291 order.push('promiseresolved'); |
| 292 return result; |
| 298 }); | 293 }); |
| 294 |
| 295 return Promise.all([func_promise, ...event_promises]) |
| 296 .then((result) => { |
| 297 if (should_be_first !== order[0]) { |
| 298 throw should_be_first === 'promiseresolved' ? |
| 299 `'${event}' was fired before promise resolved.` : |
| 300 `Promise resolved before '${event}' was fired.`; |
| 301 } |
| 302 |
| 303 if (order[0] !== 'promiseresolved' && |
| 304 order[order.length - 1] !== 'promiseresolved') { |
| 305 throw 'Promise resolved in between event listeners.'; |
| 306 } |
| 307 |
| 308 return result; |
| 309 }); |
| 310 } |
| 311 |
| 312 // See assert_promise_event_order_ above. |
| 313 function assert_promise_resolves_before_event( |
| 314 object, func, event, num_listeners=1) { |
| 315 return assert_promise_event_order_( |
| 316 'promiseresolved', object, func, event, num_listeners); |
| 317 } |
| 318 |
| 319 // See assert_promise_event_order_ above. |
| 320 function assert_promise_resolves_after_event( |
| 321 object, func, event, num_listeners=1) { |
| 322 return assert_promise_event_order_( |
| 323 'event', object, func, event, num_listeners); |
| 299 } | 324 } |
| 300 | 325 |
| 301 // Returns a promise that resolves after 100ms unless | 326 // Returns a promise that resolves after 100ms unless |
| 302 // the the event is fired on the object in which case | 327 // the the event is fired on the object in which case |
| 303 // the promise rejects. | 328 // the promise rejects. |
| 304 function assert_no_events(object, event_name) { | 329 function assert_no_events(object, event_name) { |
| 305 return new Promise((resolve, reject) => { | 330 return new Promise((resolve, reject) => { |
| 306 let event_listener = (e) => { | 331 let event_listener = (e) => { |
| 307 object.removeEventListener(event_name, event_listener); | 332 object.removeEventListener(event_name, event_listener); |
| 308 assert_unreached('Object should not fire an event.'); | 333 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' }], | 415 filters: [{ services: services, name: 'Name' }], |
| 391 optionalServices: ['heart_rate'] | 416 optionalServices: ['heart_rate'] |
| 392 }, { | 417 }, { |
| 393 filters: [{ services: services, namePrefix: 'Pre' }], | 418 filters: [{ services: services, namePrefix: 'Pre' }], |
| 394 optionalServices: ['heart_rate'] | 419 optionalServices: ['heart_rate'] |
| 395 }, { | 420 }, { |
| 396 filters: [{ services: services, name: 'Name', namePrefix: 'Pre' }], | 421 filters: [{ services: services, name: 'Name', namePrefix: 'Pre' }], |
| 397 optionalServices: ['heart_rate'] | 422 optionalServices: ['heart_rate'] |
| 398 }]; | 423 }]; |
| 399 } | 424 } |
| OLD | NEW |