mirror of https://github.com/webpack/webpack.git
				
				
				
			
		
			
				
	
	
		
			343 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			343 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
/* globals describe it */
 | 
						|
 | 
						|
var should = require("should");
 | 
						|
var NodeWatchFileSystem = require("../lib/node/NodeWatchFileSystem");
 | 
						|
 | 
						|
describe("NodeWatchFileSystem", function() {
 | 
						|
	it("should throw if 'files' argument is not an array", function() {
 | 
						|
		should(function() {
 | 
						|
			new NodeWatchFileSystem().watch(undefined);
 | 
						|
		}).throw("Invalid arguments: 'files'");
 | 
						|
	});
 | 
						|
 | 
						|
	it("should throw if 'dirs' argument is not an array", function() {
 | 
						|
		should(function() {
 | 
						|
			new NodeWatchFileSystem().watch([], undefined);
 | 
						|
		}).throw("Invalid arguments: 'dirs'");
 | 
						|
	});
 | 
						|
 | 
						|
	it("should throw if 'missing' argument is not an array", function() {
 | 
						|
		should(function() {
 | 
						|
			new NodeWatchFileSystem().watch([], [], undefined);
 | 
						|
		}).throw("Invalid arguments: 'missing'");
 | 
						|
	});
 | 
						|
 | 
						|
	it("should throw if 'starttime' argument is missing", function() {
 | 
						|
		should(function() {
 | 
						|
			new NodeWatchFileSystem().watch([], [], [], "42", {}, function() {});
 | 
						|
		}).throw("Invalid arguments: 'startTime'");
 | 
						|
	});
 | 
						|
 | 
						|
	it("should throw if 'callback' argument is missing", function() {
 | 
						|
		should(function() {
 | 
						|
			new NodeWatchFileSystem().watch([], [], [], 42, {}, undefined);
 | 
						|
		}).throw("Invalid arguments: 'callback'");
 | 
						|
	});
 | 
						|
 | 
						|
	it("should throw if 'options' argument is invalid", function() {
 | 
						|
		should(function() {
 | 
						|
			new NodeWatchFileSystem().watch([], [], [], 42, "options", function() {});
 | 
						|
		}).throw("Invalid arguments: 'options'");
 | 
						|
	});
 | 
						|
 | 
						|
	it("should throw if 'callbackUndelayed' argument is invalid", function() {
 | 
						|
		should(function() {
 | 
						|
			new NodeWatchFileSystem().watch(
 | 
						|
				[],
 | 
						|
				[],
 | 
						|
				[],
 | 
						|
				42,
 | 
						|
				{},
 | 
						|
				function() {},
 | 
						|
				"undefined"
 | 
						|
			);
 | 
						|
		}).throw("Invalid arguments: 'callbackUndelayed'");
 | 
						|
	});
 | 
						|
 | 
						|
	if (process.env.NO_WATCH_TESTS) {
 | 
						|
		it("long running tests excluded");
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	var path = require("path");
 | 
						|
	var fs = require("fs");
 | 
						|
	var fixtures = path.join(__dirname, "fixtures");
 | 
						|
	var fileDirect = path.join(fixtures, "watched-file.txt");
 | 
						|
	var fileSubdir = path.join(fixtures, "subdir", "watched-file.txt");
 | 
						|
 | 
						|
	this.timeout(10000);
 | 
						|
 | 
						|
	it("should register a file change (change delayed)", function(done) {
 | 
						|
		var startTime = new Date().getTime();
 | 
						|
		var wfs = new NodeWatchFileSystem();
 | 
						|
		var watcher = wfs.watch(
 | 
						|
			[fileDirect],
 | 
						|
			[],
 | 
						|
			[],
 | 
						|
			startTime,
 | 
						|
			{
 | 
						|
				aggregateTimeout: 1000
 | 
						|
			},
 | 
						|
			function(
 | 
						|
				err,
 | 
						|
				filesModified,
 | 
						|
				dirsModified,
 | 
						|
				missingCreated,
 | 
						|
				fileTimestamps
 | 
						|
			) {
 | 
						|
				if (err) throw err;
 | 
						|
				filesModified.should.be.eql([fileDirect]);
 | 
						|
				dirsModified.should.be.eql([]);
 | 
						|
				(typeof fileTimestamps.get(fileDirect)).should.be.eql("number");
 | 
						|
				watcher.close();
 | 
						|
				done();
 | 
						|
			}
 | 
						|
		);
 | 
						|
 | 
						|
		setTimeout(function() {
 | 
						|
			fs.writeFile(fileDirect, "", function() {});
 | 
						|
		}, 500);
 | 
						|
	});
 | 
						|
	it("should register a file change (watch delayed)", function(done) {
 | 
						|
		var startTime = new Date().getTime();
 | 
						|
		setTimeout(function() {
 | 
						|
			var wfs = new NodeWatchFileSystem();
 | 
						|
			var watcher = wfs.watch(
 | 
						|
				[fileDirect],
 | 
						|
				[],
 | 
						|
				[],
 | 
						|
				startTime,
 | 
						|
				{
 | 
						|
					aggregateTimeout: 1000
 | 
						|
				},
 | 
						|
				function(
 | 
						|
					err,
 | 
						|
					filesModified,
 | 
						|
					dirsModified,
 | 
						|
					missingCreated,
 | 
						|
					fileTimestamps
 | 
						|
				) {
 | 
						|
					if (err) throw err;
 | 
						|
					filesModified.should.be.eql([fileDirect]);
 | 
						|
					dirsModified.should.be.eql([]);
 | 
						|
					(typeof fileTimestamps.get(fileDirect)).should.be.eql("number");
 | 
						|
					watcher.close();
 | 
						|
					done();
 | 
						|
				}
 | 
						|
			);
 | 
						|
		}, 500);
 | 
						|
 | 
						|
		fs.writeFile(fileDirect, "", function() {});
 | 
						|
	});
 | 
						|
	it("should register a context change (change delayed)", function(done) {
 | 
						|
		var startTime = new Date().getTime();
 | 
						|
		var wfs = new NodeWatchFileSystem();
 | 
						|
		var watcher = wfs.watch(
 | 
						|
			[],
 | 
						|
			[fixtures],
 | 
						|
			[],
 | 
						|
			startTime,
 | 
						|
			{
 | 
						|
				aggregateTimeout: 1000
 | 
						|
			},
 | 
						|
			function(
 | 
						|
				err,
 | 
						|
				filesModified,
 | 
						|
				dirsModified,
 | 
						|
				missingCreated,
 | 
						|
				fileTimestamps,
 | 
						|
				dirTimestamps
 | 
						|
			) {
 | 
						|
				if (err) throw err;
 | 
						|
				filesModified.should.be.eql([]);
 | 
						|
				dirsModified.should.be.eql([fixtures]);
 | 
						|
				(typeof dirTimestamps.get(fixtures)).should.be.eql("number");
 | 
						|
				watcher.close();
 | 
						|
				done();
 | 
						|
			}
 | 
						|
		);
 | 
						|
 | 
						|
		setTimeout(function() {
 | 
						|
			fs.writeFile(fileDirect, "", function() {});
 | 
						|
		}, 500);
 | 
						|
	});
 | 
						|
	it("should register a context change (watch delayed)", function(done) {
 | 
						|
		var startTime = new Date().getTime();
 | 
						|
		setTimeout(function() {
 | 
						|
			var wfs = new NodeWatchFileSystem();
 | 
						|
			var watcher = wfs.watch(
 | 
						|
				[],
 | 
						|
				[fixtures],
 | 
						|
				[],
 | 
						|
				startTime,
 | 
						|
				{
 | 
						|
					aggregateTimeout: 1000
 | 
						|
				},
 | 
						|
				function(
 | 
						|
					err,
 | 
						|
					filesModified,
 | 
						|
					dirsModified,
 | 
						|
					missingCreated,
 | 
						|
					fileTimestamps,
 | 
						|
					dirTimestamps
 | 
						|
				) {
 | 
						|
					if (err) throw err;
 | 
						|
					filesModified.should.be.eql([]);
 | 
						|
					dirsModified.should.be.eql([fixtures]);
 | 
						|
					(typeof dirTimestamps.get(fixtures)).should.be.eql("number");
 | 
						|
					watcher.close();
 | 
						|
					done();
 | 
						|
				}
 | 
						|
			);
 | 
						|
		}, 500);
 | 
						|
 | 
						|
		fs.writeFile(fileDirect, "", function() {});
 | 
						|
	});
 | 
						|
	it("should register a context change (change delayed, subdirectory)", function(
 | 
						|
		done
 | 
						|
	) {
 | 
						|
		var startTime = new Date().getTime();
 | 
						|
		var wfs = new NodeWatchFileSystem();
 | 
						|
		var watcher = wfs.watch(
 | 
						|
			[],
 | 
						|
			[fixtures],
 | 
						|
			[],
 | 
						|
			startTime,
 | 
						|
			{
 | 
						|
				aggregateTimeout: 1000
 | 
						|
			},
 | 
						|
			function(
 | 
						|
				err,
 | 
						|
				filesModified,
 | 
						|
				dirsModified,
 | 
						|
				missingCreated,
 | 
						|
				fileTimestamps,
 | 
						|
				dirTimestamps
 | 
						|
			) {
 | 
						|
				if (err) throw err;
 | 
						|
				filesModified.should.be.eql([]);
 | 
						|
				dirsModified.should.be.eql([fixtures]);
 | 
						|
				(typeof dirTimestamps.get(fixtures)).should.be.eql("number");
 | 
						|
				watcher.close();
 | 
						|
				done();
 | 
						|
			}
 | 
						|
		);
 | 
						|
 | 
						|
		setTimeout(function() {
 | 
						|
			fs.writeFile(fileSubdir, "", function() {});
 | 
						|
		}, 500);
 | 
						|
	});
 | 
						|
	it("should register a context change (watch delayed, subdirectory)", function(
 | 
						|
		done
 | 
						|
	) {
 | 
						|
		var startTime = new Date().getTime();
 | 
						|
		setTimeout(function() {
 | 
						|
			var wfs = new NodeWatchFileSystem();
 | 
						|
			var watcher = wfs.watch(
 | 
						|
				[],
 | 
						|
				[fixtures],
 | 
						|
				[],
 | 
						|
				startTime,
 | 
						|
				{
 | 
						|
					aggregateTimeout: 1000
 | 
						|
				},
 | 
						|
				function(
 | 
						|
					err,
 | 
						|
					filesModified,
 | 
						|
					dirsModified,
 | 
						|
					missingCreated,
 | 
						|
					fileTimestamps,
 | 
						|
					dirTimestamps
 | 
						|
				) {
 | 
						|
					if (err) throw err;
 | 
						|
					filesModified.should.be.eql([]);
 | 
						|
					dirsModified.should.be.eql([fixtures]);
 | 
						|
					(typeof dirTimestamps.get(fixtures)).should.be.eql("number");
 | 
						|
					watcher.close();
 | 
						|
					done();
 | 
						|
				}
 | 
						|
			);
 | 
						|
		}, 500);
 | 
						|
 | 
						|
		fs.writeFile(fileSubdir, "", function() {});
 | 
						|
	});
 | 
						|
	it("should allow to combine all", function(done) {
 | 
						|
		var startTime = new Date().getTime();
 | 
						|
		setTimeout(function() {
 | 
						|
			var wfs = new NodeWatchFileSystem();
 | 
						|
			var watcher = wfs.watch(
 | 
						|
				[fileDirect, fileSubdir],
 | 
						|
				[fixtures],
 | 
						|
				[],
 | 
						|
				startTime,
 | 
						|
				{
 | 
						|
					aggregateTimeout: 1000
 | 
						|
				},
 | 
						|
				function(
 | 
						|
					err,
 | 
						|
					filesModified,
 | 
						|
					dirsModified,
 | 
						|
					missingCreated,
 | 
						|
					fileTimestamps,
 | 
						|
					dirTimestamps
 | 
						|
				) {
 | 
						|
					if (err) throw err;
 | 
						|
					filesModified.should.be.eql([fileSubdir, fileDirect]);
 | 
						|
					dirsModified.should.be.eql([fixtures]);
 | 
						|
					(typeof fileTimestamps.get(fileDirect)).should.be.eql("number");
 | 
						|
					(typeof fileTimestamps.get(fileSubdir)).should.be.eql("number");
 | 
						|
					(typeof dirTimestamps.get(fixtures)).should.be.eql("number");
 | 
						|
					watcher.close();
 | 
						|
					done();
 | 
						|
				}
 | 
						|
			);
 | 
						|
		}, 500);
 | 
						|
 | 
						|
		fs.writeFile(fileDirect, "", function() {});
 | 
						|
		fs.writeFile(fileSubdir, "", function() {});
 | 
						|
	});
 | 
						|
	it("should sum up multiple changes", function(done) {
 | 
						|
		var startTime = new Date().getTime();
 | 
						|
		var wfs = new NodeWatchFileSystem();
 | 
						|
		var watcher = wfs.watch(
 | 
						|
			[fileDirect, fileSubdir],
 | 
						|
			[fixtures],
 | 
						|
			[],
 | 
						|
			startTime,
 | 
						|
			{
 | 
						|
				aggregateTimeout: 1000
 | 
						|
			},
 | 
						|
			function(
 | 
						|
				err,
 | 
						|
				filesModified,
 | 
						|
				dirsModified,
 | 
						|
				missingCreated,
 | 
						|
				fileTimestamps,
 | 
						|
				dirTimestamps
 | 
						|
			) {
 | 
						|
				if (err) throw err;
 | 
						|
				filesModified.should.be.eql([fileSubdir, fileDirect]);
 | 
						|
				dirsModified.should.be.eql([fixtures]);
 | 
						|
				(typeof fileTimestamps.get(fileDirect)).should.be.eql("number");
 | 
						|
				(typeof fileTimestamps.get(fileSubdir)).should.be.eql("number");
 | 
						|
				(typeof dirTimestamps.get(fixtures)).should.be.eql("number");
 | 
						|
				watcher.close();
 | 
						|
				done();
 | 
						|
			}
 | 
						|
		);
 | 
						|
 | 
						|
		setTimeout(function() {
 | 
						|
			fs.writeFile(fileDirect, "", function() {});
 | 
						|
			setTimeout(function() {
 | 
						|
				fs.writeFile(fileDirect, "", function() {});
 | 
						|
				setTimeout(function() {
 | 
						|
					fs.writeFile(fileDirect, "", function() {});
 | 
						|
					setTimeout(function() {
 | 
						|
						fs.writeFile(fileSubdir, "", function() {});
 | 
						|
					}, 500);
 | 
						|
				}, 500);
 | 
						|
			}, 500);
 | 
						|
		}, 500);
 | 
						|
	});
 | 
						|
});
 |