mirror of https://github.com/webpack/webpack.git
339 lines
8.1 KiB
JavaScript
339 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);
|
|
});
|
|
});
|