public void CreateAndDispose() { DirectoryTreeWatcherBase watcher = new FakeDirectoryTreeWatcher(new DirectoryInfo(@"X:\root")); Action act = () => watcher.Dispose(); act.Should().NotThrow(); }
public void SubscribeNullCallback() { DirectoryTreeWatcherBase watcherBase = new FakeDirectoryTreeWatcher(new DirectoryInfo(@"X:\root")); Action <FileInfo> onUpdate = null; Action act = () => watcherBase.Subscribe("file1.txt", onUpdate); act.Should().Throw <ArgumentNullException>().Which.ParamName.Should().Be("onUpdate"); }
public void SubscribeFileRootedPath() { DirectoryTreeWatcherBase watcherBase = new FakeDirectoryTreeWatcher(new DirectoryInfo(@"X:\root")); Action <FileInfo> onUpdate = f => { }; Action act = () => watcherBase.Subscribe(@"D:\path.txt", onUpdate); ArgumentException ae = act.Should().Throw <ArgumentException>().Which; ae.Message.Should().Contain(@"The file 'D:\path.txt' is not within directory 'X:\root\'"); ae.ParamName.Should().Be("file"); }
public void SubscribeEmptyFileName() { DirectoryTreeWatcherBase watcherBase = new FakeDirectoryTreeWatcher(new DirectoryInfo(@"X:\root")); Action <FileInfo> onUpdate = f => { }; Action act = () => watcherBase.Subscribe(string.Empty, onUpdate); ArgumentException ae = act.Should().Throw <ArgumentException>().Which; ae.Message.Should().Contain("File name cannot be empty"); ae.ParamName.Should().Be("file"); }
public void SubscribeBadFileName() { DirectoryTreeWatcherBase watcherBase = new FakeDirectoryTreeWatcher(new DirectoryInfo(@"X:\root")); Action <FileInfo> onUpdate = f => { }; Action act = () => watcherBase.Subscribe("**BADNAME??", onUpdate); ArgumentException ae = act.Should().Throw <ArgumentException>().Which; ae.Message.Should().Contain("Invalid file name '**BADNAME??'"); ae.ParamName.Should().Be("file"); }
public void SubscribeSameFileTwiceDifferentCase() { DirectoryTreeWatcherBase watcherBase = new FakeDirectoryTreeWatcher(new DirectoryInfo(@"X:\root")); Action <FileInfo> onUpdate = f => { }; watcherBase.Subscribe("file1.txt", onUpdate); Action act = () => watcherBase.Subscribe("FILE1.txt", onUpdate); act.Should().Throw <InvalidOperationException>() .WithMessage(@"A subscription for 'X:\root\FILE1.txt' already exists."); }
public void UpdateRelevantFileOneSubscriptionDifferentCaseRelPath() { List <string> updates = new List <string>(); FakeDirectoryTreeWatcher watcher = new FakeDirectoryTreeWatcher(new DirectoryInfo(@"X:\root")); DirectoryTreeWatcherBase watcherBase = watcher; watcherBase.Subscribe(@"..\ROOT\file1.txt", f => updates.Add(f.FullName)); FakeDirectoryWatcher innerWatcher = watcher.Watchers.Should().ContainSingle().Which; innerWatcher.Update(@"X:\root\FILE1.txt"); updates.Should().ContainSingle().Which.Should().Be(@"X:\ROOT\file1.txt"); }
public void UpdateIrrelevantFileOneSubscription() { List <string> updates = new List <string>(); FakeDirectoryTreeWatcher watcher = new FakeDirectoryTreeWatcher(new DirectoryInfo(@"X:\root")); DirectoryTreeWatcherBase watcherBase = watcher; watcherBase.Subscribe("file1.txt", f => updates.Add(f.FullName)); FakeDirectoryWatcher innerWatcher = watcher.Watchers.Should().ContainSingle().Which; innerWatcher.Update(@"X:\root\not-relevant.txt"); updates.Should().BeEmpty(); }
public void UpdateAfterDispose() { List <string> updates = new List <string>(); FakeDirectoryTreeWatcher watcher = new FakeDirectoryTreeWatcher(new DirectoryInfo(@"X:\root")); using (DirectoryTreeWatcherBase watcherBase = watcher) { watcherBase.Subscribe("file1.txt", f => updates.Add(f.FullName)); } FakeDirectoryWatcher innerWatcher = watcher.Watchers.Should().ContainSingle().Which; innerWatcher.Update(@"X:\root\file1.txt"); updates.Should().BeEmpty(); }
public void UpdateTwoFilesTwoSubscriptionsDifferentDir() { List <string> updates = new List <string>(); FakeDirectoryTreeWatcher watcher = new FakeDirectoryTreeWatcher(new DirectoryInfo(@"X:\root")); DirectoryTreeWatcherBase watcherBase = watcher; watcherBase.Subscribe(@"inner1\file1.txt", f => updates.Add(f.FullName)); watcherBase.Subscribe(@"inner2\file2.txt", f => updates.Add(f.FullName)); watcher.Watchers.Should().HaveCount(2); watcher.Watchers[1].Update(@"X:\root\inner2\file2.txt"); watcher.Watchers[0].Update(@"X:\root\inner1\file1.txt"); updates.Should().HaveCount(2).And.ContainInOrder( @"X:\root\inner2\file2.txt", @"X:\root\inner1\file1.txt"); }
public void UpdateTwoFilesTwoSubscriptionsSameDirDifferentCase() { List <string> updates = new List <string>(); FakeDirectoryTreeWatcher watcher = new FakeDirectoryTreeWatcher(new DirectoryInfo(@"X:\root")); DirectoryTreeWatcherBase watcherBase = watcher; watcherBase.Subscribe(@"inner\file1.txt", f => updates.Add(f.FullName)); watcherBase.Subscribe(@"INNER\file2.txt", f => updates.Add(f.FullName)); FakeDirectoryWatcher innerWatcher = watcher.Watchers.Should().ContainSingle().Which; innerWatcher.Update(@"X:\root\inner\file2.txt"); innerWatcher.Update(@"X:\root\inner\file1.txt"); updates.Should().HaveCount(2).And.ContainInOrder( @"X:\root\inner\file2.txt", @"X:\root\inner\file1.txt"); }
public void AfterSubscriptionDisposeSubscribeAgainAndUpdate() { List <string> updates = new List <string>(); FakeDirectoryTreeWatcher watcher = new FakeDirectoryTreeWatcher(new DirectoryInfo(@"X:\root")); DirectoryTreeWatcherBase watcherBase = watcher; using (watcherBase.Subscribe("file1.txt", f => updates.Add(f.FullName))) { } watcherBase.Subscribe("file1.txt", f => updates.Add(f.FullName)); watcherBase.Subscribe("file2.txt", f => updates.Add(f.FullName)); FakeDirectoryWatcher innerWatcher = watcher.Watchers.Should().ContainSingle().Which; innerWatcher.Update(@"X:\root\file1.txt"); innerWatcher.Update(@"X:\root\file2.txt"); updates.Should().HaveCount(2).And.ContainInOrder( @"X:\root\file1.txt", @"X:\root\file2.txt"); }