|  |  |  | /* global textsecure */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe('createTaskWithTimeout', () => { | 
					
						
							|  |  |  |   it('resolves when promise resolves', () => { | 
					
						
							|  |  |  |     const task = () => Promise.resolve('hi!'); | 
					
						
							|  |  |  |     const taskWithTimeout = textsecure.createTaskWithTimeout(task); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return taskWithTimeout().then(result => { | 
					
						
							|  |  |  |       assert.strictEqual(result, 'hi!'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   it('flows error from promise back', () => { | 
					
						
							|  |  |  |     const error = new Error('original'); | 
					
						
							|  |  |  |     const task = () => Promise.reject(error); | 
					
						
							|  |  |  |     const taskWithTimeout = textsecure.createTaskWithTimeout(task); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return taskWithTimeout().catch(flowedError => { | 
					
						
							|  |  |  |       assert.strictEqual(error, flowedError); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   it('rejects if promise takes too long (this one logs error to console)', () => { | 
					
						
							|  |  |  |     let complete = false; | 
					
						
							|  |  |  |     const task = () => | 
					
						
							|  |  |  |       new Promise(resolve => { | 
					
						
							|  |  |  |         setTimeout(() => { | 
					
						
							|  |  |  |           complete = true; | 
					
						
							|  |  |  |           resolve(); | 
					
						
							|  |  |  |         }, 3000); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     const taskWithTimeout = textsecure.createTaskWithTimeout(task, this.name, { | 
					
						
							|  |  |  |       timeout: 10, | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return taskWithTimeout().then( | 
					
						
							|  |  |  |       () => { | 
					
						
							|  |  |  |         throw new Error('it was not supposed to resolve!'); | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       () => { | 
					
						
							|  |  |  |         assert.strictEqual(complete, false); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   it('resolves if task returns something falsey', () => { | 
					
						
							|  |  |  |     const task = () => {}; | 
					
						
							|  |  |  |     const taskWithTimeout = textsecure.createTaskWithTimeout(task); | 
					
						
							|  |  |  |     return taskWithTimeout(); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   it('resolves if task returns a non-promise', () => { | 
					
						
							|  |  |  |     const task = () => 'hi!'; | 
					
						
							|  |  |  |     const taskWithTimeout = textsecure.createTaskWithTimeout(task); | 
					
						
							|  |  |  |     return taskWithTimeout().then(result => { | 
					
						
							|  |  |  |       assert.strictEqual(result, 'hi!'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   it('rejects if task throws (and does not log about taking too long)', () => { | 
					
						
							|  |  |  |     const error = new Error('Task is throwing!'); | 
					
						
							|  |  |  |     const task = () => { | 
					
						
							|  |  |  |       throw error; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |     const taskWithTimeout = textsecure.createTaskWithTimeout(task, this.name, { | 
					
						
							|  |  |  |       timeout: 10, | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |     return taskWithTimeout().then( | 
					
						
							|  |  |  |       () => { | 
					
						
							|  |  |  |         throw new Error('Overall task should reject!'); | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       flowedError => { | 
					
						
							|  |  |  |         assert.strictEqual(flowedError, error); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | }); |