webpack/test/NodeWatchFileSystem.unittes...

221 lines
7.5 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);
});
});