mirror of https://github.com/webpack/webpack.git
				
				
				
			
		
			
				
	
	
		
			163 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
"use strict";
 | 
						|
 | 
						|
const path = require("path");
 | 
						|
const { createFsFromVolume, Volume } = require("memfs");
 | 
						|
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 = createFsFromVolume(new Volume());
 | 
						|
	compiler.watchFileSystem = {
 | 
						|
		watch(a, b, c, d, e, f, g) {}
 | 
						|
	};
 | 
						|
	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 = createFsFromVolume(new Volume());
 | 
						|
		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);
 | 
						|
			});
 | 
						|
		});
 | 
						|
	});
 | 
						|
});
 |