UNPKG

orionsoft-react-scripts

Version:

Orionsoft Configuration and scripts for Create React App.

147 lines (136 loc) 3.85 kB
/*globals describe it beforeEach afterEach */ require("should"); var path = require("path"); var TestHelper = require("./helpers/TestHelper"); var OrgDirectoryWatcher = require("../lib/DirectoryWatcher"); var fixtures = path.join(__dirname, "fixtures"); var testHelper = new TestHelper(fixtures); var openWatchers = []; var DirectoryWatcher = function(p, options) { var d = new OrgDirectoryWatcher(p, options); openWatchers.push(d); var orgClose = d.close; d.close = function() { orgClose.call(this); var idx = openWatchers.indexOf(d); if(idx < 0) throw new Error("DirectoryWatcher was already closed"); openWatchers.splice(idx, 1); }; return d; }; describe("DirectoryWatcher", function() { this.timeout(10000); beforeEach(testHelper.before); afterEach(testHelper.after); afterEach(function() { openWatchers.forEach(function(d) { console.log("DirectoryWatcher (" + d.path + ") was not closed."); d.close(); }); }); it("should detect a file creation", function(done) { var d = new DirectoryWatcher(fixtures, {}); var a = d.watch(path.join(fixtures, "a")); a.on("change", function(mtime) { mtime.should.be.type("number"); Object.keys(d.getTimes()).sort().should.be.eql([ path.join(fixtures, "a") ]); a.close(); done(); }); testHelper.tick(function() { testHelper.file("a"); }); }); it("should detect a file change", function(done) { var d = new DirectoryWatcher(fixtures, {}); testHelper.file("a"); var a = d.watch(path.join(fixtures, "a")); a.on("change", function(mtime) { mtime.should.be.type("number"); a.close(); done(); }); testHelper.tick(function() { testHelper.file("a"); }); }); it("should not detect a file change in initial scan", function(done) { testHelper.file("a"); testHelper.tick(function() { var d = new DirectoryWatcher(fixtures, {}); var a = d.watch(path.join(fixtures, "a")); a.on("change", function() { throw new Error("should not be detected"); }); testHelper.tick(function() { a.close(); done(); }); }); }); it("should detect a file change in initial scan with start date", function(done) { var start = new Date(); testHelper.tick(1000, function() { testHelper.file("a"); testHelper.tick(1000, function() { var d = new DirectoryWatcher(fixtures, {}); var a = d.watch(path.join(fixtures, "a"), start); a.on("change", function() { a.close(); done(); }); }); }); }); it("should not detect a file change in initial scan without start date", function(done) { testHelper.file("a"); testHelper.tick(function() { var d = new DirectoryWatcher(fixtures, {}); var a = d.watch(path.join(fixtures, "a")); a.on("change", function() { throw new Error("should not be detected"); }); testHelper.tick(function() { a.close(); done(); }); }); }); var timings = { slow: 300, fast: 50 }; Object.keys(timings).forEach(function(name) { var time = timings[name]; it("should detect multiple file changes (" + name + ")", function(done) { var d = new DirectoryWatcher(fixtures, {}); testHelper.file("a"); testHelper.tick(function() { var a = d.watch(path.join(fixtures, "a")); var count = 20; var wasChanged = false; a.on("change", function(mtime) { mtime.should.be.type("number"); if(!wasChanged) return; wasChanged = false; if(count-- <= 0) { a.close(); done(); } else { testHelper.tick(time, function() { wasChanged = true; testHelper.file("a"); }); } }); testHelper.tick(function() { wasChanged = true; testHelper.file("a"); }); }); }); }); });