| 
									
										
										
										
											2018-01-27 06:59:38 +08:00
										 |  |  | expect.extend({ | 
					
						
							|  |  |  | 	toBeTypeOf(received, expected) { | 
					
						
							|  |  |  | 		const objType = typeof received; | 
					
						
							|  |  |  | 		const pass = objType === expected; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		const message = pass | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 			? () => | 
					
						
							|  |  |  | 					this.utils.matcherHint(".not.toBeTypeOf") + | 
					
						
							|  |  |  | 					"\n\n" + | 
					
						
							|  |  |  | 					"Expected value to not be (using typeof):\n" + | 
					
						
							|  |  |  | 					`  ${this.utils.printExpected(expected)}\n` + | 
					
						
							|  |  |  | 					"Received:\n" + | 
					
						
							|  |  |  | 					`  ${this.utils.printReceived(objType)}` | 
					
						
							|  |  |  | 			: () => | 
					
						
							|  |  |  | 					this.utils.matcherHint(".toBeTypeOf") + | 
					
						
							|  |  |  | 					"\n\n" + | 
					
						
							|  |  |  | 					"Expected value to be (using typeof):\n" + | 
					
						
							|  |  |  | 					`  ${this.utils.printExpected(expected)}\n` + | 
					
						
							|  |  |  | 					"Received:\n" + | 
					
						
							|  |  |  | 					`  ${this.utils.printReceived(objType)}`; | 
					
						
							| 
									
										
										
										
											2018-01-27 06:59:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		return { message, pass }; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | }); | 
					
						
							| 
									
										
										
										
											2018-10-19 17:39:06 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | if (process.env.ALTERNATIVE_SORT) { | 
					
						
							|  |  |  | 	const oldSort = Array.prototype.sort; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Array.prototype.sort = function(cmp) { | 
					
						
							|  |  |  | 		oldSort.call(this, cmp); | 
					
						
							|  |  |  | 		if (cmp) { | 
					
						
							|  |  |  | 			for (let i = 1; i < this.length; i++) { | 
					
						
							|  |  |  | 				if (cmp(this[i - 1], this[i]) === 0) { | 
					
						
							|  |  |  | 					let j = i + 1; | 
					
						
							|  |  |  | 					for (; j < this.length; j++) { | 
					
						
							|  |  |  | 						if (cmp(this[j - 1], this[j]) !== 0) { | 
					
						
							|  |  |  | 							break; | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 					for (let x = i - 1, y = j - 1; x < y; x++, y--) { | 
					
						
							|  |  |  | 						const temp = this[x]; | 
					
						
							|  |  |  | 						this[x] = this[y]; | 
					
						
							|  |  |  | 						this[y] = temp; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 					i = j; | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		return this; | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-10-30 20:46:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-30 18:20:47 +08:00
										 |  |  | // Setup debugging info for tests
 | 
					
						
							| 
									
										
										
										
											2019-02-19 15:58:46 +08:00
										 |  |  | if (process.env.DEBUG_INFO) { | 
					
						
							|  |  |  | 	const addDebugInfo = it => { | 
					
						
							| 
									
										
										
										
											2018-11-30 18:20:47 +08:00
										 |  |  | 		return (name, fn, timeout) => { | 
					
						
							| 
									
										
										
										
											2019-02-19 15:58:46 +08:00
										 |  |  | 			if (fn.length === 0) { | 
					
						
							|  |  |  | 				it( | 
					
						
							|  |  |  | 					name, | 
					
						
							|  |  |  | 					() => { | 
					
						
							|  |  |  | 						process.stdout.write(`START1 ${name}\n`); | 
					
						
							|  |  |  | 						try { | 
					
						
							|  |  |  | 							const promise = fn(); | 
					
						
							|  |  |  | 							if (promise && promise.then) { | 
					
						
							|  |  |  | 								return promise.then( | 
					
						
							|  |  |  | 									r => { | 
					
						
							|  |  |  | 										process.stdout.write(`DONE OK ${name}\n`); | 
					
						
							|  |  |  | 										return r; | 
					
						
							|  |  |  | 									}, | 
					
						
							|  |  |  | 									e => { | 
					
						
							|  |  |  | 										process.stdout.write(`DONE FAIL ${name}\n`); | 
					
						
							|  |  |  | 										throw e; | 
					
						
							|  |  |  | 									} | 
					
						
							|  |  |  | 								); | 
					
						
							|  |  |  | 							} else { | 
					
						
							| 
									
										
										
										
											2018-11-30 18:20:47 +08:00
										 |  |  | 								process.stdout.write(`DONE OK ${name}\n`); | 
					
						
							| 
									
										
										
										
											2019-02-19 15:58:46 +08:00
										 |  |  | 							} | 
					
						
							|  |  |  | 						} catch (e) { | 
					
						
							| 
									
										
										
										
											2018-11-30 18:20:47 +08:00
										 |  |  | 							process.stdout.write(`DONE FAIL ${name}\n`); | 
					
						
							| 
									
										
										
										
											2019-02-19 15:58:46 +08:00
										 |  |  | 							throw e; | 
					
						
							| 
									
										
										
										
											2018-11-30 18:20:47 +08:00
										 |  |  | 						} | 
					
						
							| 
									
										
										
										
											2019-02-19 15:58:46 +08:00
										 |  |  | 					}, | 
					
						
							|  |  |  | 					timeout | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				it( | 
					
						
							|  |  |  | 					name, | 
					
						
							|  |  |  | 					done => { | 
					
						
							|  |  |  | 						process.stdout.write(`START2 ${name}\n`); | 
					
						
							|  |  |  | 						return fn(err => { | 
					
						
							|  |  |  | 							if (err) { | 
					
						
							|  |  |  | 								process.stdout.write(`DONE FAIL ${name}\n`); | 
					
						
							|  |  |  | 							} else { | 
					
						
							|  |  |  | 								process.stdout.write(`DONE OK ${name}\n`); | 
					
						
							|  |  |  | 							} | 
					
						
							|  |  |  | 							return done(err); | 
					
						
							|  |  |  | 						}); | 
					
						
							|  |  |  | 					}, | 
					
						
							|  |  |  | 					timeout | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2018-11-30 18:20:47 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2019-02-19 15:58:46 +08:00
										 |  |  | 		}; | 
					
						
							| 
									
										
										
										
											2018-11-30 18:20:47 +08:00
										 |  |  | 	}; | 
					
						
							|  |  |  | 	const env = jasmine.getEnv(); | 
					
						
							|  |  |  | 	env.it = addDebugInfo(env.it); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-30 20:46:50 +08:00
										 |  |  | // Workaround for a memory leak in wabt
 | 
					
						
							|  |  |  | // It leaks an Error object on construction
 | 
					
						
							|  |  |  | // so it leaks the whole stack trace
 | 
					
						
							|  |  |  | require("wast-loader"); | 
					
						
							| 
									
										
										
										
											2018-11-30 22:20:14 +08:00
										 |  |  | process.removeAllListeners("uncaughtException"); | 
					
						
							|  |  |  | process.removeAllListeners("unhandledRejection"); |