| 
									
										
										
										
											2020-06-25 17:44:11 +08:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const path = require("path"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const webpack = require("../"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe("WatchClose", () => { | 
					
						
							|  |  |  | 	jest.setTimeout(5000); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	describe("multiple calls watcher", () => { | 
					
						
							|  |  |  | 		const fixturePath = path.join(__dirname, "fixtures"); | 
					
						
							|  |  |  | 		const filePath = path.join(fixturePath, "a.js"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		let compiler; | 
					
						
							|  |  |  | 		let watcher; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		beforeEach(() => { | 
					
						
							|  |  |  | 			compiler = webpack({ | 
					
						
							|  |  |  | 				mode: "development", | 
					
						
							|  |  |  | 				entry: filePath, | 
					
						
							|  |  |  | 				output: { | 
					
						
							|  |  |  | 					path: fixturePath, | 
					
						
							|  |  |  | 					filename: "bundle.js" | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2021-02-14 04:18:47 +08:00
										 |  |  | 			watcher = compiler.watch({ poll: 300 }, () => {}); | 
					
						
							| 
									
										
										
										
											2020-06-25 17:44:11 +08:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		afterEach(() => { | 
					
						
							|  |  |  | 			watcher.close(); | 
					
						
							|  |  |  | 			compiler = null; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		function close(watcher, callback) { | 
					
						
							|  |  |  | 			return new Promise(res => { | 
					
						
							|  |  |  | 				const onClose = () => { | 
					
						
							|  |  |  | 					callback(); | 
					
						
							|  |  |  | 					res(); | 
					
						
							|  |  |  | 				}; | 
					
						
							|  |  |  | 				watcher.close(onClose); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		it("each callback should be called", async done => { | 
					
						
							|  |  |  | 			let num = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			await Promise.all([ | 
					
						
							|  |  |  | 				close(watcher, () => (num += 1)), | 
					
						
							|  |  |  | 				close(watcher, () => (num += 10)) | 
					
						
							|  |  |  | 			]); | 
					
						
							| 
									
										
										
										
											2020-07-15 20:48:40 +08:00
										 |  |  | 			await Promise.all([ | 
					
						
							|  |  |  | 				close(watcher, () => (num += 100)), | 
					
						
							|  |  |  | 				close(watcher, () => (num += 1000)) | 
					
						
							|  |  |  | 			]); | 
					
						
							| 
									
										
										
										
											2020-06-25 17:44:11 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-15 20:48:40 +08:00
										 |  |  | 			expect(num).toBe(1111); | 
					
						
							| 
									
										
										
										
											2020-06-25 17:44:11 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			done(); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }); |