1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
/*globals describe it beforeEach afterEach */
"use strict";
require("should");
var path = require("path");
var TestHelper = require("./helpers/TestHelper");
var Watchpack = require("../lib/watchpack");
var fixtures = path.join(__dirname, "fixtures");
var testHelper = new TestHelper(fixtures);
var fsIsCaseInsensitive;
try {
fsIsCaseInsensitive = require("fs").existsSync(
path.join(__dirname, "..", "PACKAGE.JSON")
);
} catch (e) {
fsIsCaseInsensitive = false;
}
if (fsIsCaseInsensitive) {
describe("Casing", function() {
this.timeout(10000);
beforeEach(testHelper.before);
afterEach(testHelper.after);
it("should watch a file with the wrong casing", function(done) {
var w = new Watchpack({
aggregateTimeout: 1000
});
var changeEvents = 0;
w.on("change", function(file) {
file.should.be.eql(path.join(fixtures, "a"));
changeEvents++;
});
w.on("aggregated", function(changes) {
Array.from(changes).should.be.eql([path.join(fixtures, "a")]);
changeEvents.should.be.greaterThan(0);
w.close();
done();
});
w.watch([path.join(fixtures, "a")], []);
testHelper.tick(function() {
testHelper.file("A");
});
});
it("should mark as missing on changing filename casing (dir watch)", function(done) {
var w = new Watchpack({
aggregateTimeout: 1000
});
var dir = "case-rename";
var testFile = path.join(dir, "hello.txt");
var testFileRename = path.join(dir, "hEllO.txt");
testHelper.dir(dir);
testHelper.file(testFile);
w.on("aggregated", function(changes, removals) {
const files = w.getTimeInfoEntries();
w.close();
changes.has(path.join(fixtures, dir)).should.be.eql(true);
for (const file of files.keys()) {
if (file.endsWith("hello.txt")) {
return done(new Error(`Renamed file was still in timeInfoEntries`));
}
}
return done();
});
testHelper.tick(function() {
w.watch([], [path.join(fixtures, "case-rename")]);
testHelper.tick(function() {
testHelper.rename(testFile, testFileRename);
});
});
});
it("should mark as missing on changing filename casing (file watch)", function(done) {
var w = new Watchpack({
aggregateTimeout: 1000
});
var dir = "case-rename";
var testFile = path.join(dir, "hello.txt");
var testFileRename = path.join(dir, "hEllO.txt");
testHelper.dir(dir);
testHelper.file(testFile);
w.on("aggregated", function(changes, removals) {
const files = w.getTimeInfoEntries();
w.close();
changes.has(path.join(fixtures, testFileRename)).should.be.eql(true);
removals.has(path.join(fixtures, testFileRename)).should.be.eql(false);
for (const file of files.keys()) {
if (file.endsWith("hello.txt") && files.get(file)) {
return done(new Error(`Renamed file was still in timeInfoEntries`));
}
}
return done();
});
testHelper.tick(function() {
w.watch({
files: [path.join(fixtures, testFile)],
missing: [path.join(fixtures, testFileRename)]
});
testHelper.tick(function() {
testHelper.rename(testFile, testFileRename);
});
});
});
});
}
|