Beispiel #1
0
        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 });
        }
Beispiel #4
0
        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));
            }
        }
Beispiel #5
0
        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));
        }
Beispiel #6
0
        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));
        }