| 
									
										
										
										
											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
										 |  |  | 			? () => | 
					
						
							| 
									
										
										
										
											2024-07-31 10:39:30 +08:00
										 |  |  | 					`${this.utils.matcherHint(".not.toBeTypeOf")}\n\n` + | 
					
						
							| 
									
										
										
										
											2024-07-31 12:23:44 +08:00
										 |  |  | 					"Expected value to not be (using typeof):\n" + | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 					`  ${this.utils.printExpected(expected)}\n` + | 
					
						
							| 
									
										
										
										
											2024-07-31 12:23:44 +08:00
										 |  |  | 					"Received:\n" + | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 					`  ${this.utils.printReceived(objType)}` | 
					
						
							|  |  |  | 			: () => | 
					
						
							| 
									
										
										
										
											2024-07-31 10:39:30 +08:00
										 |  |  | 					`${this.utils.matcherHint(".toBeTypeOf")}\n\n` + | 
					
						
							| 
									
										
										
										
											2024-07-31 12:23:44 +08:00
										 |  |  | 					"Expected value to be (using typeof):\n" + | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 					`  ${this.utils.printExpected(expected)}\n` + | 
					
						
							| 
									
										
										
										
											2024-07-31 12:23:44 +08:00
										 |  |  | 					"Received:\n" + | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 					`  ${this.utils.printReceived(objType)}`; | 
					
						
							| 
									
										
										
										
											2018-01-27 06:59:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-09 21:14:44 +08:00
										 |  |  | 		return { message, pass }; | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 	toEndWith(received, expected) { | 
					
						
							|  |  |  | 		const pass = typeof received === "string" && received.endsWith(expected); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		const message = pass | 
					
						
							|  |  |  | 			? () => | 
					
						
							| 
									
										
										
										
											2024-07-31 10:39:30 +08:00
										 |  |  | 					`${this.utils.matcherHint(".not.toEndWith")}\n\n` + | 
					
						
							| 
									
										
										
										
											2024-07-31 12:23:44 +08:00
										 |  |  | 					"Expected value to not end with:\n" + | 
					
						
							| 
									
										
										
										
											2020-03-09 21:14:44 +08:00
										 |  |  | 					`  ${this.utils.printExpected(expected)}\n` + | 
					
						
							| 
									
										
										
										
											2024-07-31 12:23:44 +08:00
										 |  |  | 					"Received:\n" + | 
					
						
							| 
									
										
										
										
											2020-03-09 21:14:44 +08:00
										 |  |  | 					`  ${this.utils.printReceived(received)}` | 
					
						
							|  |  |  | 			: () => | 
					
						
							| 
									
										
										
										
											2024-07-31 10:39:30 +08:00
										 |  |  | 					`${this.utils.matcherHint(".toEndWith")}\n\n` + | 
					
						
							| 
									
										
										
										
											2024-07-31 12:23:44 +08:00
										 |  |  | 					"Expected value to end with:\n" + | 
					
						
							| 
									
										
										
										
											2020-03-09 21:14:44 +08:00
										 |  |  | 					`  ${this.utils.printExpected(expected)}\n` + | 
					
						
							| 
									
										
										
										
											2024-07-31 12:23:44 +08:00
										 |  |  | 					"Received:\n" + | 
					
						
							| 
									
										
										
										
											2020-03-09 21:14:44 +08:00
										 |  |  | 					`  ${this.utils.printReceived(received)}`; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-29 06:10:15 +08:00
										 |  |  | 	Array.prototype.sort = function (cmp) { | 
					
						
							| 
									
										
										
										
											2018-10-19 17:39:06 +08:00
										 |  |  | 		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) { | 
					
						
							| 
									
										
										
										
											2024-07-31 11:31:11 +08:00
										 |  |  | 	const addDebugInfo = it => (name, fn, timeout) => { | 
					
						
							|  |  |  | 		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; | 
					
						
							|  |  |  | 								}, | 
					
						
							| 
									
										
										
										
											2024-07-31 15:37:05 +08:00
										 |  |  | 								err => { | 
					
						
							| 
									
										
										
										
											2024-07-31 11:31:11 +08:00
										 |  |  | 									process.stdout.write(`DONE FAIL ${name}\n`); | 
					
						
							| 
									
										
										
										
											2024-07-31 15:37:05 +08:00
										 |  |  | 									throw err; | 
					
						
							| 
									
										
										
										
											2024-07-31 11:31:11 +08:00
										 |  |  | 								} | 
					
						
							|  |  |  | 							); | 
					
						
							|  |  |  | 						} | 
					
						
							| 
									
										
										
										
											2024-07-31 04:21:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-31 11:31:11 +08:00
										 |  |  | 						process.stdout.write(`DONE OK ${name}\n`); | 
					
						
							| 
									
										
										
										
											2024-07-31 15:37:05 +08:00
										 |  |  | 					} catch (err) { | 
					
						
							| 
									
										
										
										
											2024-07-31 11:31:11 +08:00
										 |  |  | 						process.stdout.write(`DONE FAIL ${name}\n`); | 
					
						
							| 
									
										
										
										
											2024-07-31 15:37:05 +08:00
										 |  |  | 						throw err; | 
					
						
							| 
									
										
										
										
											2024-07-31 11:31:11 +08:00
										 |  |  | 					} | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				timeout | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			it( | 
					
						
							|  |  |  | 				name, | 
					
						
							|  |  |  | 				done => { | 
					
						
							|  |  |  | 					process.stdout.write(`START2 ${name}\n`); | 
					
						
							|  |  |  | 					return fn(err => { | 
					
						
							|  |  |  | 						if (err) { | 
					
						
							| 
									
										
										
										
											2018-11-30 18:20:47 +08:00
										 |  |  | 							process.stdout.write(`DONE FAIL ${name}\n`); | 
					
						
							| 
									
										
										
										
											2024-07-31 11:31:11 +08:00
										 |  |  | 						} else { | 
					
						
							|  |  |  | 							process.stdout.write(`DONE OK ${name}\n`); | 
					
						
							| 
									
										
										
										
											2018-11-30 18:20:47 +08:00
										 |  |  | 						} | 
					
						
							| 
									
										
										
										
											2024-07-31 11:31:11 +08:00
										 |  |  | 						return done(err); | 
					
						
							|  |  |  | 					}); | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				timeout | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-11-30 18:20:47 +08:00
										 |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2021-07-13 16:20:21 +08:00
										 |  |  | 	// eslint-disable-next-line no-global-assign
 | 
					
						
							|  |  |  | 	it = addDebugInfo(it); | 
					
						
							| 
									
										
										
										
											2018-11-30 18:20:47 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-18 17:38:06 +08:00
										 |  |  | // cspell:word wabt
 | 
					
						
							| 
									
										
										
										
											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"); |