| 
									
										
										
										
											2015-05-10 19:50:15 +08:00
										 |  |  | /* globals describe it */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-29 01:09:55 +08:00
										 |  |  | if(process.env.NO_WATCH_TESTS) { | 
					
						
							|  |  |  | 	describe("NodeWatchFileSystem", function() { | 
					
						
							|  |  |  | 		it("tests excluded"); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 	return; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-10 19:50:15 +08:00
										 |  |  | require("should"); | 
					
						
							| 
									
										
										
										
											2013-02-11 07:17:29 +08:00
										 |  |  | var path = require("path"); | 
					
						
							|  |  |  | var fs = require("fs"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var NodeWatchFileSystem = require("../lib/node/NodeWatchFileSystem"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var fixtures = path.join(__dirname, "fixtures"); | 
					
						
							|  |  |  | var fileDirect = path.join(fixtures, "watched-file.txt"); | 
					
						
							|  |  |  | var fileSubdir = path.join(fixtures, "subdir", "watched-file.txt"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe("NodeWatchFileSystem", function() { | 
					
						
							| 
									
										
										
										
											2015-01-18 04:55:44 +08:00
										 |  |  | 	this.timeout(10000); | 
					
						
							| 
									
										
										
										
											2013-02-11 07:17:29 +08:00
										 |  |  | 	it("should register a file change (change delayed)", function(done) { | 
					
						
							|  |  |  | 		var startTime = new Date().getTime(); | 
					
						
							| 
									
										
										
										
											2015-01-18 04:55:44 +08:00
										 |  |  | 		var wfs = new NodeWatchFileSystem(); | 
					
						
							| 
									
										
										
										
											2015-05-10 19:50:15 +08:00
										 |  |  | 		var watcher = wfs.watch([fileDirect], [], [], startTime, { aggregateTimeout: 1000 }, function(err, filesModified, dirsModified, missingCreated, fileTimestamps /*, dirTimestamps */) { | 
					
						
							| 
									
										
										
										
											2013-02-11 07:17:29 +08:00
										 |  |  | 			if(err) throw err; | 
					
						
							|  |  |  | 			filesModified.should.be.eql([fileDirect]); | 
					
						
							|  |  |  | 			dirsModified.should.be.eql([]); | 
					
						
							| 
									
										
										
										
											2013-10-16 04:33:11 +08:00
										 |  |  | 			fileTimestamps.should.have.property(fileDirect).have.type("number"); | 
					
						
							| 
									
										
										
										
											2015-01-18 04:55:44 +08:00
										 |  |  | 			watcher.close(); | 
					
						
							| 
									
										
										
										
											2013-02-11 07:17:29 +08:00
										 |  |  | 			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() { | 
					
						
							| 
									
										
										
										
											2015-01-18 04:55:44 +08:00
										 |  |  | 			var wfs = new NodeWatchFileSystem(); | 
					
						
							| 
									
										
										
										
											2015-05-10 19:50:15 +08:00
										 |  |  | 			var watcher = wfs.watch([fileDirect], [], [], startTime, { aggregateTimeout: 1000 }, function(err, filesModified, dirsModified, missingCreated, fileTimestamps /*, dirTimestamps */) { | 
					
						
							| 
									
										
										
										
											2013-02-11 07:17:29 +08:00
										 |  |  | 				if(err) throw err; | 
					
						
							|  |  |  | 				filesModified.should.be.eql([fileDirect]); | 
					
						
							|  |  |  | 				dirsModified.should.be.eql([]); | 
					
						
							| 
									
										
										
										
											2013-10-16 04:33:11 +08:00
										 |  |  | 				fileTimestamps.should.have.property(fileDirect).have.type("number"); | 
					
						
							| 
									
										
										
										
											2015-01-18 04:55:44 +08:00
										 |  |  | 				watcher.close(); | 
					
						
							| 
									
										
										
										
											2013-02-11 07:17:29 +08:00
										 |  |  | 				done(); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}, 500); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		fs.writeFile(fileDirect, "", function() {}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 	it("should register a context change (change delayed)", function(done) { | 
					
						
							|  |  |  | 		var startTime = new Date().getTime(); | 
					
						
							| 
									
										
										
										
											2015-01-18 04:55:44 +08:00
										 |  |  | 		var wfs = new NodeWatchFileSystem(); | 
					
						
							| 
									
										
										
										
											2015-05-10 19:50:15 +08:00
										 |  |  | 		var watcher = wfs.watch([], [fixtures], [], startTime, { aggregateTimeout: 1000 }, function(err, filesModified, dirsModified, missingCreated, fileTimestamps, dirTimestamps) { | 
					
						
							| 
									
										
										
										
											2013-02-11 07:17:29 +08:00
										 |  |  | 			if(err) throw err; | 
					
						
							|  |  |  | 			filesModified.should.be.eql([]); | 
					
						
							|  |  |  | 			dirsModified.should.be.eql([fixtures]); | 
					
						
							| 
									
										
										
										
											2013-10-16 04:33:11 +08:00
										 |  |  | 			dirTimestamps.should.have.property(fixtures).have.type("number"); | 
					
						
							| 
									
										
										
										
											2015-01-18 04:55:44 +08:00
										 |  |  | 			watcher.close(); | 
					
						
							| 
									
										
										
										
											2013-02-11 07:17:29 +08:00
										 |  |  | 			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() { | 
					
						
							| 
									
										
										
										
											2015-01-18 04:55:44 +08:00
										 |  |  | 			var wfs = new NodeWatchFileSystem(); | 
					
						
							| 
									
										
										
										
											2015-05-10 19:50:15 +08:00
										 |  |  | 			var watcher = wfs.watch([], [fixtures], [], startTime, { aggregateTimeout: 1000 }, function(err, filesModified, dirsModified, missingCreated, fileTimestamps, dirTimestamps) { | 
					
						
							| 
									
										
										
										
											2013-02-11 07:17:29 +08:00
										 |  |  | 				if(err) throw err; | 
					
						
							|  |  |  | 				filesModified.should.be.eql([]); | 
					
						
							|  |  |  | 				dirsModified.should.be.eql([fixtures]); | 
					
						
							| 
									
										
										
										
											2013-10-16 04:33:11 +08:00
										 |  |  | 				dirTimestamps.should.have.property(fixtures).have.type("number"); | 
					
						
							| 
									
										
										
										
											2015-01-18 04:55:44 +08:00
										 |  |  | 				watcher.close(); | 
					
						
							| 
									
										
										
										
											2013-02-11 07:17:29 +08:00
										 |  |  | 				done(); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}, 500); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		fs.writeFile(fileDirect, "", function() {}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 	it("should register a context change (change delayed, subdirectory)", function(done) { | 
					
						
							|  |  |  | 		var startTime = new Date().getTime(); | 
					
						
							| 
									
										
										
										
											2015-01-18 04:55:44 +08:00
										 |  |  | 		var wfs = new NodeWatchFileSystem(); | 
					
						
							| 
									
										
										
										
											2015-05-10 19:50:15 +08:00
										 |  |  | 		var watcher = wfs.watch([], [fixtures], [], startTime, { aggregateTimeout: 1000 }, function(err, filesModified, dirsModified, missingCreated, fileTimestamps, dirTimestamps) { | 
					
						
							| 
									
										
										
										
											2013-02-11 07:17:29 +08:00
										 |  |  | 			if(err) throw err; | 
					
						
							|  |  |  | 			filesModified.should.be.eql([]); | 
					
						
							|  |  |  | 			dirsModified.should.be.eql([fixtures]); | 
					
						
							| 
									
										
										
										
											2013-10-16 04:33:11 +08:00
										 |  |  | 			dirTimestamps.should.have.property(fixtures).have.type("number"); | 
					
						
							| 
									
										
										
										
											2015-01-18 04:55:44 +08:00
										 |  |  | 			watcher.close(); | 
					
						
							| 
									
										
										
										
											2013-02-11 07:17:29 +08:00
										 |  |  | 			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() { | 
					
						
							| 
									
										
										
										
											2015-01-18 04:55:44 +08:00
										 |  |  | 			var wfs = new NodeWatchFileSystem(); | 
					
						
							| 
									
										
										
										
											2015-05-10 19:50:15 +08:00
										 |  |  | 			var watcher = wfs.watch([], [fixtures], [], startTime, { aggregateTimeout: 1000 }, function(err, filesModified, dirsModified, missingCreated, fileTimestamps, dirTimestamps) { | 
					
						
							| 
									
										
										
										
											2013-02-11 07:17:29 +08:00
										 |  |  | 				if(err) throw err; | 
					
						
							|  |  |  | 				filesModified.should.be.eql([]); | 
					
						
							|  |  |  | 				dirsModified.should.be.eql([fixtures]); | 
					
						
							| 
									
										
										
										
											2013-10-16 04:33:11 +08:00
										 |  |  | 				dirTimestamps.should.have.property(fixtures).have.type("number"); | 
					
						
							| 
									
										
										
										
											2015-01-18 04:55:44 +08:00
										 |  |  | 				watcher.close(); | 
					
						
							| 
									
										
										
										
											2013-02-11 07:17:29 +08:00
										 |  |  | 				done(); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}, 500); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		fs.writeFile(fileSubdir, "", function() {}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 	it("should allow to combine all", function(done) { | 
					
						
							|  |  |  | 		var startTime = new Date().getTime(); | 
					
						
							|  |  |  | 		setTimeout(function() { | 
					
						
							| 
									
										
										
										
											2015-01-18 04:55:44 +08:00
										 |  |  | 			var wfs = new NodeWatchFileSystem(); | 
					
						
							| 
									
										
										
										
											2015-05-10 19:50:15 +08:00
										 |  |  | 			var watcher = wfs.watch([fileDirect, fileSubdir], [fixtures], [], startTime, { aggregateTimeout: 1000 }, function(err, filesModified, dirsModified, missingCreated, fileTimestamps, dirTimestamps) { | 
					
						
							| 
									
										
										
										
											2013-02-11 07:17:29 +08:00
										 |  |  | 				if(err) throw err; | 
					
						
							|  |  |  | 				filesModified.should.be.eql([fileSubdir, fileDirect]); | 
					
						
							|  |  |  | 				dirsModified.should.be.eql([fixtures]); | 
					
						
							| 
									
										
										
										
											2013-10-16 04:33:11 +08:00
										 |  |  | 				fileTimestamps.should.have.property(fileDirect).have.type("number"); | 
					
						
							|  |  |  | 				fileTimestamps.should.have.property(fileSubdir).have.type("number"); | 
					
						
							|  |  |  | 				dirTimestamps.should.have.property(fixtures).have.type("number"); | 
					
						
							| 
									
										
										
										
											2015-01-18 04:55:44 +08:00
										 |  |  | 				watcher.close(); | 
					
						
							| 
									
										
										
										
											2013-02-11 07:17:29 +08:00
										 |  |  | 				done(); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}, 500); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		fs.writeFile(fileDirect, "", function() {}); | 
					
						
							|  |  |  | 		fs.writeFile(fileSubdir, "", function() {}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 	it("should sum up multiple changes", function(done) { | 
					
						
							|  |  |  | 		var startTime = new Date().getTime(); | 
					
						
							| 
									
										
										
										
											2015-01-18 04:55:44 +08:00
										 |  |  | 			var wfs = new NodeWatchFileSystem(); | 
					
						
							| 
									
										
										
										
											2015-05-10 19:50:15 +08:00
										 |  |  | 			var watcher = wfs.watch([fileDirect, fileSubdir], [fixtures], [], startTime, { aggregateTimeout: 1000 }, function(err, filesModified, dirsModified, missingCreated, fileTimestamps, dirTimestamps) { | 
					
						
							| 
									
										
										
										
											2013-02-11 07:17:29 +08:00
										 |  |  | 				if(err) throw err; | 
					
						
							|  |  |  | 				filesModified.should.be.eql([fileSubdir, fileDirect]); | 
					
						
							|  |  |  | 				dirsModified.should.be.eql([fixtures]); | 
					
						
							| 
									
										
										
										
											2013-10-16 04:33:11 +08:00
										 |  |  | 				fileTimestamps.should.have.property(fileDirect).have.type("number"); | 
					
						
							|  |  |  | 				fileTimestamps.should.have.property(fileSubdir).have.type("number"); | 
					
						
							|  |  |  | 				dirTimestamps.should.have.property(fixtures).have.type("number"); | 
					
						
							| 
									
										
										
										
											2015-01-18 04:55:44 +08:00
										 |  |  | 				watcher.close(); | 
					
						
							| 
									
										
										
										
											2013-02-11 07:17:29 +08:00
										 |  |  | 				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); | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2015-01-18 04:55:44 +08:00
										 |  |  | }); |