mirror of https://github.com/webpack/webpack.git
				
				
				
			
		
			
				
	
	
		
			117 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| "use strict";
 | |
| 
 | |
| /*globals describe it before after  */
 | |
| const should = require("should");
 | |
| const path = require("path");
 | |
| const fs = require("fs");
 | |
| const MemoryFs = require("memory-fs");
 | |
| 
 | |
| const webpack = require("../");
 | |
| 
 | |
| describe("WatchDetection", () => {
 | |
| 	for(let changeTimeout = 0; changeTimeout < 100; changeTimeout += 10) {
 | |
| 		createTestCase(changeTimeout);
 | |
| 	}
 | |
| 	for(let changeTimeout = 100; changeTimeout <= 2000; changeTimeout += 100) {
 | |
| 		createTestCase(changeTimeout);
 | |
| 	}
 | |
| 
 | |
| 	function createTestCase(changeTimeout) {
 | |
| 		describe("time between changes " + changeTimeout + "ms", function() {
 | |
| 			this.timeout(10000);
 | |
| 			const fixturePath = path.join(__dirname, "fixtures", "temp-" + changeTimeout);
 | |
| 			const filePath = path.join(fixturePath, "file.js");
 | |
| 			const file2Path = path.join(fixturePath, "file2.js");
 | |
| 			const loaderPath = path.join(__dirname, "fixtures", "delay-loader.js");
 | |
| 			before(() => {
 | |
| 				try {
 | |
| 					fs.mkdirSync(fixturePath);
 | |
| 				} catch(e) {}
 | |
| 				fs.writeFileSync(filePath, "require('./file2')", "utf-8");
 | |
| 				fs.writeFileSync(file2Path, "original", "utf-8");
 | |
| 			});
 | |
| 			after((done) => {
 | |
| 				setTimeout(() => {
 | |
| 					try {
 | |
| 						fs.unlinkSync(filePath);
 | |
| 					} catch(e) {}
 | |
| 					try {
 | |
| 						fs.unlinkSync(file2Path);
 | |
| 					} catch(e) {}
 | |
| 					try {
 | |
| 						fs.rmdirSync(fixturePath);
 | |
| 					} catch(e) {}
 | |
| 					done();
 | |
| 				}, 100); // cool down a bit
 | |
| 			});
 | |
| 			it("should build the bundle correctly", (done) => {
 | |
| 				const compiler = webpack({
 | |
| 					entry: loaderPath + "!" + filePath,
 | |
| 					output: {
 | |
| 						path: "/",
 | |
| 						filename: "bundle.js"
 | |
| 					}
 | |
| 				});
 | |
| 				const memfs = compiler.outputFileSystem = new MemoryFs();
 | |
| 				let onChange;
 | |
| 				compiler.plugin("done", () => {
 | |
| 					if(onChange)
 | |
| 						onChange();
 | |
| 				});
 | |
| 
 | |
| 				let watcher;
 | |
| 
 | |
| 				step1();
 | |
| 
 | |
| 				function step1() {
 | |
| 					onChange = () => {
 | |
| 						if(memfs.readFileSync("/bundle.js") && memfs.readFileSync("/bundle.js").toString().indexOf("original") >= 0)
 | |
| 							step2();
 | |
| 					};
 | |
| 
 | |
| 					watcher = compiler.watch({
 | |
| 						aggregateTimeout: 50
 | |
| 					}, () => {});
 | |
| 				}
 | |
| 
 | |
| 				function step2() {
 | |
| 					onChange = null;
 | |
| 
 | |
| 					fs.writeFile(filePath, "require('./file2'); again", "utf-8", handleError);
 | |
| 
 | |
| 					setTimeout(step3, changeTimeout);
 | |
| 				}
 | |
| 
 | |
| 				function step3() {
 | |
| 					onChange = null;
 | |
| 
 | |
| 					fs.writeFile(file2Path, "wrong", "utf-8", handleError);
 | |
| 
 | |
| 					setTimeout(step4, changeTimeout);
 | |
| 				}
 | |
| 
 | |
| 				function step4() {
 | |
| 					onChange = () => {
 | |
| 						if(memfs.readFileSync("/bundle.js").toString().indexOf("correct") >= 0)
 | |
| 							step4();
 | |
| 					};
 | |
| 
 | |
| 					fs.writeFile(file2Path, "correct", "utf-8", handleError);
 | |
| 				}
 | |
| 
 | |
| 				function step4() {
 | |
| 					onChange = null;
 | |
| 
 | |
| 					watcher.close();
 | |
| 
 | |
| 					done();
 | |
| 				}
 | |
| 
 | |
| 				function handleError(err) {
 | |
| 					if(err) done(err);
 | |
| 				}
 | |
| 			});
 | |
| 		});
 | |
| 	}
 | |
| });
 |