mirror of https://github.com/webpack/webpack.git
				
				
				
			
		
			
				
	
	
		
			160 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			160 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| "use strict";
 | |
| 
 | |
| const path = require("path");
 | |
| const MemoryFs = require("memory-fs");
 | |
| const webpack = require("..");
 | |
| 
 | |
| const createMultiCompiler = () => {
 | |
| 	const compiler = webpack([
 | |
| 		{
 | |
| 			context: path.join(__dirname, "fixtures"),
 | |
| 			entry: "./a.js"
 | |
| 		},
 | |
| 		{
 | |
| 			context: path.join(__dirname, "fixtures"),
 | |
| 			entry: "./b.js"
 | |
| 		}
 | |
| 	]);
 | |
| 	compiler.outputFileSystem = new MemoryFs();
 | |
| 	return compiler;
 | |
| };
 | |
| 
 | |
| describe("MultiCompiler", function() {
 | |
| 	jest.setTimeout(20000);
 | |
| 
 | |
| 	it("should trigger 'run' for each child compiler", done => {
 | |
| 		const compiler = createMultiCompiler();
 | |
| 		let called = 0;
 | |
| 
 | |
| 		compiler.hooks.run.tap("MultiCompiler test", () => called++);
 | |
| 		compiler.run(err => {
 | |
| 			if (err) {
 | |
| 				throw err;
 | |
| 			} else {
 | |
| 				expect(called).toBe(2);
 | |
| 				done();
 | |
| 			}
 | |
| 		});
 | |
| 	});
 | |
| 
 | |
| 	it("should trigger 'watchRun' for each child compiler", done => {
 | |
| 		const compiler = createMultiCompiler();
 | |
| 		let called = 0;
 | |
| 
 | |
| 		compiler.hooks.watchRun.tap("MultiCompiler test", () => called++);
 | |
| 		const watcher = compiler.watch(1000, err => {
 | |
| 			if (err) {
 | |
| 				throw err;
 | |
| 			} else {
 | |
| 				watcher.close();
 | |
| 				expect(called).toBe(2);
 | |
| 				done();
 | |
| 			}
 | |
| 		});
 | |
| 	});
 | |
| 
 | |
| 	it("should not be run twice at a time (run)", function(done) {
 | |
| 		const compiler = createMultiCompiler();
 | |
| 		compiler.run((err, stats) => {
 | |
| 			if (err) return done(err);
 | |
| 		});
 | |
| 		compiler.run((err, stats) => {
 | |
| 			if (err) return done();
 | |
| 		});
 | |
| 	});
 | |
| 	it("should not be run twice at a time (watch)", function(done) {
 | |
| 		const compiler = createMultiCompiler();
 | |
| 		const watcher = compiler.watch({}, (err, stats) => {
 | |
| 			if (err) return done(err);
 | |
| 		});
 | |
| 		compiler.watch({}, (err, stats) => {
 | |
| 			if (err) return watcher.close(done);
 | |
| 		});
 | |
| 	});
 | |
| 	it("should not be run twice at a time (run - watch)", function(done) {
 | |
| 		const compiler = createMultiCompiler();
 | |
| 		compiler.run((err, stats) => {
 | |
| 			if (err) return done(err);
 | |
| 		});
 | |
| 		compiler.watch({}, (err, stats) => {
 | |
| 			if (err) return done();
 | |
| 		});
 | |
| 	});
 | |
| 	it("should not be run twice at a time (watch - run)", function(done) {
 | |
| 		const compiler = createMultiCompiler();
 | |
| 		let watcher;
 | |
| 		watcher = compiler.watch({}, (err, stats) => {
 | |
| 			if (err) return done(err);
 | |
| 		});
 | |
| 		compiler.run((err, stats) => {
 | |
| 			if (err) return watcher.close(done);
 | |
| 		});
 | |
| 	});
 | |
| 	it("should not be run twice at a time (instance cb)", function(done) {
 | |
| 		const compiler = webpack(
 | |
| 			{
 | |
| 				context: __dirname,
 | |
| 				mode: "production",
 | |
| 				entry: "./c",
 | |
| 				output: {
 | |
| 					path: "/",
 | |
| 					filename: "bundle.js"
 | |
| 				}
 | |
| 			},
 | |
| 			() => {}
 | |
| 		);
 | |
| 		compiler.outputFileSystem = new MemoryFs();
 | |
| 		compiler.run((err, stats) => {
 | |
| 			if (err) return done();
 | |
| 		});
 | |
| 	});
 | |
| 	it("should run again correctly after first compilation", function(done) {
 | |
| 		const compiler = createMultiCompiler();
 | |
| 		compiler.run((err, stats) => {
 | |
| 			if (err) return done(err);
 | |
| 
 | |
| 			compiler.run((err, stats) => {
 | |
| 				if (err) return done(err);
 | |
| 				done();
 | |
| 			});
 | |
| 		});
 | |
| 	});
 | |
| 	it("should watch again correctly after first compilation", function(done) {
 | |
| 		const compiler = createMultiCompiler();
 | |
| 		compiler.run((err, stats) => {
 | |
| 			if (err) return done(err);
 | |
| 
 | |
| 			let watcher;
 | |
| 			watcher = compiler.watch({}, (err, stats) => {
 | |
| 				if (err) return done(err);
 | |
| 				watcher.close(done);
 | |
| 			});
 | |
| 		});
 | |
| 	});
 | |
| 	it("should run again correctly after first closed watch", function(done) {
 | |
| 		const compiler = createMultiCompiler();
 | |
| 		const watching = compiler.watch({}, (err, stats) => {
 | |
| 			if (err) return done(err);
 | |
| 		});
 | |
| 		watching.close(() => {
 | |
| 			compiler.run((err, stats) => {
 | |
| 				if (err) return done(err);
 | |
| 				done();
 | |
| 			});
 | |
| 		});
 | |
| 	});
 | |
| 	it("should watch again correctly after first closed watch", function(done) {
 | |
| 		const compiler = createMultiCompiler();
 | |
| 		const watching = compiler.watch({}, (err, stats) => {
 | |
| 			if (err) return done(err);
 | |
| 		});
 | |
| 		watching.close(() => {
 | |
| 			let watcher;
 | |
| 			watcher = compiler.watch({}, (err, stats) => {
 | |
| 				if (err) return done(err);
 | |
| 				watcher.close(done);
 | |
| 			});
 | |
| 		});
 | |
| 	});
 | |
| });
 |