public async Task DeleteProjectFileExternally_TwoSolutionsOpen_OneSolutionDisposed() { FilePath rootSolFile = Util.GetSampleProject("FileWatcherTest", "Root.sln"); string solFile = rootSolFile.ParentDirectory.Combine("FileWatcherTest", "FileWatcherTest.sln"); sol = (Solution)await Services.ProjectService.ReadWorkspaceItem(Util.GetMonitor(), solFile); ProjectFile file; using (var sol2 = (Solution)await Services.ProjectService.ReadWorkspaceItem(Util.GetMonitor(), rootSolFile)) { var p = (DotNetProject)sol.Items [0]; ClearFileEventsCaptured(); await FileWatcherService.Add(sol); await FileWatcherService.Add(sol2); file = p.Files.First(f => f.FilePath.FileName == "MyClass.cs"); } // Disposing the solution does not wait for the file watchers to be updated // so force the update. await FileWatcherService.Update(); // Delete after disposing the root solution File.Delete(file.FilePath); await WaitForFileRemoved(file.FilePath); AssertFileRemoved(file.FilePath); }
public async Task TestConeOuter_GetItemFiles() { using var workspace = SetupWorkspace(1); var project = workspace.GetAllItems <MockProject> ().Single(); var newDir = project.BaseDirectory.ParentDirectory.Combine("new_dir"); Directory.CreateDirectory(newDir); var createFile = newDir.Combine("file"); await FileWatcherService.Add(workspace); // Create and validate it's not notified File.WriteAllText(createFile, ""); await WaitForFileChanged(createFile); Assert.AreEqual(0, project.Created.Count); File.Delete(createFile); // Add it to item collection and check it is notified now project.Items.Add(new ProjectFile(createFile)); workspace.GetAllItems <MockWorkspaceItem> ().Single().OnRootDirectoriesChanged(project, false, false); await FileWatcherService.Update(); File.WriteAllText(createFile, ""); await WaitForFileChanged(createFile); Assert.AreEqual(1, project.Created.Count); await FileWatcherService.Remove(workspace); }
async Task TestAll(MockProject project, Workspace ws) { await FileWatcherService.Update(); foreach (var toClear in ws.GetAllItems <MockProject> ()) { toClear.Reset(); } var testFile = project.BaseDirectory.Combine("test_file"); // Create -> Change -> Rename -> Delete File.WriteAllText(testFile, ""); File.Move(testFile, testFile + 2); File.Delete(testFile + 2); await WaitForFilesRemoved(new FilePath[] { testFile, testFile + 2 }); }
public async Task AddSolutionToWorkspace_ChangeFileInAddedSolution() { FilePath rootProject = Util.GetSampleProject("FileWatcherTest", "Root.csproj"); string workspaceFile = rootProject.ParentDirectory.Combine("Workspace", "FileWatcherTest.mdw"); using (var workspace = (Workspace)await Services.ProjectService.ReadWorkspaceItem(Util.GetMonitor(), workspaceFile)) { await FileWatcherService.Add(workspace); string solFile = rootProject.ParentDirectory.Combine("FileWatcherTest", "FileWatcherTest3.sln"); sol = (Solution)await Services.ProjectService.ReadWorkspaceItem(Util.GetMonitor(), solFile); var p = (DotNetProject)sol.Items [0]; var file = p.Files.First(f => f.FilePath.FileName == "MyClass.cs"); workspace.Items.Add(sol); await workspace.SaveAsync(Util.GetMonitor()); var otherFile = workspace.FileName.ParentDirectory.Combine("test.txt"); ClearFileEventsCaptured(); // Make sure file watcher is updated since adding the new solution // will start a task and may not have finished. So force an update here. await FileWatcherService.Update(); TextFileUtility.WriteText(file.FilePath, string.Empty, Encoding.UTF8); await WaitForFileChanged(file.FilePath); AssertFileChanged(file.FilePath); Assert.IsFalse(file.FilePath.IsChildPathOf(workspace.BaseDirectory)); workspace.Items.Remove(sol); await workspace.SaveAsync(Util.GetMonitor()); await FileWatcherService.Update(); ClearFileEventsCaptured(); TextFileUtility.WriteText(file.FilePath, string.Empty, Encoding.UTF8); TextFileUtility.WriteText(otherFile, string.Empty, Encoding.UTF8); await WaitForFilesChanged(new [] { file.FilePath, otherFile }); Assert.IsFalse(fileChanges.Any(f => f.FileName == file.FilePath)); } }
public async Task AddNewProjectToSolution_ChangeFileInNewProject() { FilePath rootProject = Util.GetSampleProject("FileWatcherTest", "Root.csproj"); string solFile = rootProject.ParentDirectory.Combine("FileWatcherTest", "FileWatcherTest3.sln"); using var sol = (Solution) await Services.ProjectService.ReadWorkspaceItem(Util.GetMonitor(), solFile); var p = (DotNetProject)sol.Items [0]; var otherFile = p.Files.First(f => f.FilePath.FileName == "MyClass.cs"); await FileWatcherService.Add(sol); var libraryProjectFile = rootProject.ParentDirectory.Combine("Library", "Library.csproj"); ProjectFile file; using (var p2 = (DotNetProject)await sol.RootFolder.AddItem(Util.GetMonitor(), libraryProjectFile)) { await sol.SaveAsync(Util.GetMonitor()); file = p2.Files.First(f => f.FilePath.FileName == "MyClass.cs"); await FileWatcherService.Update(); ClearFileEventsCaptured(); TextFileUtility.WriteText(file.FilePath, string.Empty, Encoding.UTF8); await WaitForFileChanged(file.FilePath); AssertFileChanged(file.FilePath); Assert.IsFalse(file.FilePath.IsChildPathOf(sol.BaseDirectory)); sol.RootFolder.Items.Remove(p2); } await sol.SaveAsync(Util.GetMonitor()); await FileWatcherService.Update(); ClearFileEventsCaptured(); TextFileUtility.WriteText(file.FilePath, string.Empty, Encoding.UTF8); TextFileUtility.WriteText(otherFile.FilePath, string.Empty, Encoding.UTF8); await WaitForFilesChanged(new [] { file.FilePath, otherFile.FilePath }); Assert.IsFalse(fileChanges.Any(f => f.FileName == file.FilePath)); }
public async Task AddFile_FileOutsideSolutionDirectory() { FilePath rootProject = Util.GetSampleProject("FileWatcherTest", "Root.csproj"); string solFile = rootProject.ParentDirectory.Combine("FileWatcherTest", "FileWatcherTest3.sln"); sol = (Solution)await Services.ProjectService.ReadWorkspaceItem(Util.GetMonitor(), solFile); var p = (DotNetProject)sol.Items [0]; var file2 = p.Files.First(f => f.FilePath.FileName == "MyClass.cs"); ClearFileEventsCaptured(); await FileWatcherService.Add(sol); var newFile = rootProject.ParentDirectory.Combine("Library", "MyClass.cs"); var file = new ProjectFile(newFile); file.Link = "LinkedMyClass.cs"; p.AddFile(file); await FileWatcherService.Update(); ClearFileEventsCaptured(); TextFileUtility.WriteText(file.FilePath, string.Empty, Encoding.UTF8); await WaitForFileChanged(file.FilePath); AssertFileChanged(file.FilePath); Assert.IsFalse(file.FilePath.IsChildPathOf(p.BaseDirectory)); Assert.IsFalse(file.FilePath.IsChildPathOf(sol.BaseDirectory)); // After removing the file no events should be generated for the file. p.Files.Remove(file); await FileWatcherService.Update(); ClearFileEventsCaptured(); TextFileUtility.WriteText(file.FilePath, string.Empty, Encoding.UTF8); TextFileUtility.WriteText(file2.FilePath, string.Empty, Encoding.UTF8); await WaitForFilesChanged(new [] { file.FilePath, file2.FilePath }); AssertFileChanged(file2.FilePath); Assert.IsFalse(fileChanges.Any(f => f.FileName == file.FilePath)); }