File: Casing.js

package info (click to toggle)
node-watchpack 2.4.0%2B~cs2.8.1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, sid, trixie
  • size: 412 kB
  • sloc: javascript: 3,958; makefile: 2
file content (118 lines) | stat: -rw-r--r-- 3,149 bytes parent folder | download | duplicates (2)
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);
				});
			});
		});
	});
}