public void NewAndChangeDeleteFileTest()
        {
            var settings = new FileWatchSetting();
            settings.Directory = _testDirectory;
            settings.DelayInMS = 100;

            FileWatcherEventArgs args = null;
            int events = 0;
            using (var watch = new FileWatch(settings))
            {
                watch.StartWatching();
                watch.Changed += (o, a) =>
                {
                    args = a;
                    events++;
                };
                string fileName = Path.Combine(_testDirectory, "Test.txt");
                File.WriteAllText(fileName, "Test");
                Thread.Sleep(20);
                File.AppendAllText(fileName, "Test");
                Thread.Sleep(20);
                File.Delete(fileName);
                Thread.Sleep(20);
                Assert.AreEqual(0, events);
                Thread.Sleep(100);
                Assert.AreEqual(0, events);
            };
        }
        public void RenameFileTest()
        {
            string fileName = Path.Combine(_testDirectory, "Test.txt");
            File.WriteAllText(fileName, "Test");

            var settings = new FileWatchSetting();
            settings.Directory = _testDirectory;
            settings.DelayInMS = 100;

            FileWatcherEventArgs args = null;
            int events = 0;
            using (var watch = new FileWatch(settings))
            {
                watch.StartWatching();
                watch.Changed += (o, a) =>
                {
                    args = a;
                    events++;
                };
                string newFileName = Path.Combine(_testDirectory, "TestNew.txt");
                File.Move(fileName, newFileName);
                Thread.Sleep(50);
                Assert.AreEqual(0, events);
                Thread.Sleep(80);
                Assert.AreEqual(1, events);
                Assert.AreEqual(1, args.NewFiles.Length);
                Assert.AreEqual(newFileName, args.NewFiles[0]);
                Assert.AreEqual(0, args.ChangedFiles.Length);
                Assert.AreEqual(1, args.DeletedFiles.Length);
                Assert.AreEqual(fileName, args.DeletedFiles[0]);

                Thread.Sleep(200);
                Assert.AreEqual(1, events);
            };
        }
        public void MultipleChangesWhileDelayTimeTest()
        {
            string fileName1 = Path.Combine(_testDirectory, "Test1.txt");
            File.WriteAllText(fileName1, "Test");
            string fileName2 = Path.Combine(_testDirectory, "Test2.txt");
            File.WriteAllText(fileName2, "Test");

            var settings = new FileWatchSetting();
            settings.Directory = _testDirectory;
            settings.DelayInMS = 100;

            FileWatcherEventArgs args = null;
            int events = 0;
            using (var watch = new FileWatch(settings))
            {
                watch.StartWatching();
                watch.Changed += (o, a) =>
                {
                    args = a;
                    events++;
                };
                string fileName3 = Path.Combine(_testDirectory, "Test3.txt");
                File.WriteAllText(fileName3, "Test");
                string fileName4 = Path.Combine(_testDirectory, "Test4.txt");
                File.WriteAllText(fileName4, "Test");
                Thread.Sleep(50);
                Assert.AreEqual(0, events);
                Thread.Sleep(80);
                Assert.AreEqual(1, events);
                Assert.AreEqual(2, args.NewFiles.Length);
                Assert.AreEqual(fileName3, args.NewFiles[0]);
                Assert.AreEqual(fileName4, args.NewFiles[1]);
                Assert.AreEqual(0, args.ChangedFiles.Length);
                Assert.AreEqual(0, args.DeletedFiles.Length);
                Thread.Sleep(200);
                Assert.AreEqual(1, events);
                File.Delete(fileName1);
                File.Delete(fileName2);
                File.AppendAllText(fileName3, "Test");
                File.AppendAllText(fileName4, "Test");
                string fileName5 = Path.Combine(_testDirectory, "Test5.txt");
                File.WriteAllText(fileName5, "Test");
                string fileName6 = Path.Combine(_testDirectory, "Test6.txt");
                File.WriteAllText(fileName6, "Test");
                Thread.Sleep(50);
                Assert.AreEqual(1, events);
                Thread.Sleep(80);
                Assert.AreEqual(2, events);
                Assert.AreEqual(fileName5, args.NewFiles[0]);
                Assert.AreEqual(fileName6, args.NewFiles[1]);
                Assert.AreEqual(fileName3, args.ChangedFiles[0]);
                Assert.AreEqual(fileName4, args.ChangedFiles[1]);
                Assert.AreEqual(fileName1, args.DeletedFiles[0]);
                Assert.AreEqual(fileName2, args.DeletedFiles[1]);

                Thread.Sleep(200);
                Assert.AreEqual(2, events);
            };
        }