public void UpdateProjectCfg_Done_WithoutWorkspaceProject_DoesNotEnqueueUpdate() { // Arrange uint cookie; var buildManager = new Mock <IVsSolutionBuildManager>(MockBehavior.Strict); buildManager .Setup(b => b.AdviseUpdateSolutionEvents(It.IsAny <VsSolutionUpdatesProjectSnapshotChangeTrigger>(), out cookie)) .Returns(VSConstants.S_OK); var services = new Mock <IServiceProvider>(MockBehavior.Strict); services.Setup(s => s.GetService(It.Is <Type>(f => f == typeof(SVsSolutionBuildManager)))).Returns(buildManager.Object); var projectSnapshot = new DefaultProjectSnapshot( ProjectState.Create( Workspace.Services, new HostProject("/Some/Unknown/Path.csproj", RazorConfiguration.Default, "Path"))); var expectedProjectPath = projectSnapshot.FilePath; var projectService = new Mock <TextBufferProjectService>(MockBehavior.Strict); projectService.Setup(p => p.GetProjectPath(It.IsAny <IVsHierarchy>())).Returns(expectedProjectPath); var projectManager = new Mock <ProjectSnapshotManagerBase>(MockBehavior.Strict); projectManager.SetupGet(p => p.Workspace).Returns(Workspace); projectManager .Setup(p => p.GetLoadedProject(expectedProjectPath)) .Returns(projectSnapshot); var workspaceStateGenerator = new TestProjectWorkspaceStateGenerator(); var trigger = new VsSolutionUpdatesProjectSnapshotChangeTrigger(services.Object, projectService.Object, workspaceStateGenerator); trigger.Initialize(projectManager.Object); // Act trigger.UpdateProjectCfg_Done(Mock.Of <IVsHierarchy>(MockBehavior.Strict), Mock.Of <IVsCfg>(MockBehavior.Strict), Mock.Of <IVsCfg>(MockBehavior.Strict), 0, 0, 0); // Assert Assert.Empty(workspaceStateGenerator.UpdateQueue); }
public void ProjectManager_Changed_IgnoresUnknownProject() { // Arrange var documentTracker = new DefaultVisualStudioDocumentTracker(FilePath, ProjectPath, ProjectManager, EditorSettingsManager, Workspace, TextBuffer, ImportDocumentManager); var project = new AdhocWorkspace().AddProject(ProjectInfo.Create(ProjectId.CreateNewId(), new VersionStamp(), "Test1", "TestAssembly", LanguageNames.CSharp, filePath: "C:/Some/Other/Path/TestProject.csproj")); var projectSnapshot = new DefaultProjectSnapshot(project); var projectChangedArgs = new ProjectChangeEventArgs(projectSnapshot, ProjectChangeKind.Changed); var called = false; documentTracker.ContextChanged += (sender, args) => { called = true; }; // Act documentTracker.ProjectManager_Changed(null, projectChangedArgs); // Assert Assert.False(called); }
public DefaultProjectSnapshotManagerProxyTest() { Workspace = TestWorkspace.Create(); var projectWorkspaceState1 = new ProjectWorkspaceState(new[] { TagHelperDescriptorBuilder.Create("test1", "TestAssembly1").Build(), }, default); ProjectSnapshot1 = new DefaultProjectSnapshot( ProjectState.Create( Workspace.Services, new HostProject("/host/path/to/project1.csproj", RazorConfiguration.Default, "project1"), projectWorkspaceState1)); var projectWorkspaceState2 = new ProjectWorkspaceState(new[] { TagHelperDescriptorBuilder.Create("test2", "TestAssembly2").Build(), }, default); ProjectSnapshot2 = new DefaultProjectSnapshot( ProjectState.Create( Workspace.Services, new HostProject("/host/path/to/project2.csproj", RazorConfiguration.Default, "project2"), projectWorkspaceState2)); }
private TestDocumentSnapshot(DefaultProjectSnapshot projectSnapshot, DocumentState documentState) : base(projectSnapshot, documentState) { }
private void UpdateProjectDocuments(IReadOnlyList <DocumentSnapshotHandle> documents, DefaultProjectSnapshot project) { var currentHostProject = project.HostProject; var projectDirectory = _filePathNormalizer.GetDirectory(project.FilePath); var documentMap = documents.ToDictionary(document => EnsureFullPath(document.FilePath, projectDirectory), FilePathComparer.Instance); foreach (var documentFilePath in project.DocumentFilePaths) { if (!documentMap.TryGetValue(documentFilePath, out var documentHandle)) { // Document exists in the project but not in the configured documents. Chances are the project configuration is from a fallback // configuration case (< 2.1) or the project isn't fully loaded yet. continue; } var documentSnapshot = (DefaultDocumentSnapshot)project.GetDocument(documentFilePath); var currentHostDocument = documentSnapshot.State.HostDocument; var newFilePath = EnsureFullPath(documentHandle.FilePath, projectDirectory); var newHostDocument = _hostDocumentFactory.Create(newFilePath, documentHandle.TargetPath, documentHandle.FileKind); if (HostDocumentComparer.Instance.Equals(currentHostDocument, newHostDocument)) { // Current and "new" host documents are equivalent continue; } _logger.LogTrace($"Updating document '{newHostDocument.FilePath}''s file kind to '{newHostDocument.FileKind}' and target path to '{newHostDocument.TargetPath}'."); _projectSnapshotManagerAccessor.Instance.DocumentRemoved(currentHostProject, currentHostDocument); var remoteTextLoader = _remoteTextLoaderFactory.Create(newFilePath); _projectSnapshotManagerAccessor.Instance.DocumentAdded(currentHostProject, newHostDocument, remoteTextLoader); } }
private void MoveDocument(string documentFilePath, DefaultProjectSnapshot fromProject, DefaultProjectSnapshot toProject) { Debug.Assert(fromProject.DocumentFilePaths.Contains(documentFilePath, FilePathComparer.Instance)); Debug.Assert(!toProject.DocumentFilePaths.Contains(documentFilePath, FilePathComparer.Instance)); var documentSnapshot = (DefaultDocumentSnapshot)fromProject.GetDocument(documentFilePath); var currentHostDocument = documentSnapshot.State.HostDocument; var textLoader = new DocumentSnapshotTextLoader(documentSnapshot); var newHostDocument = _hostDocumentFactory.Create(documentSnapshot.FilePath, documentSnapshot.TargetPath, documentSnapshot.FileKind); _logger.LogInformation($"Moving '{documentFilePath}' from the '{fromProject.FilePath}' project to '{toProject.FilePath}' project."); _projectSnapshotManagerAccessor.Instance.DocumentRemoved(fromProject.HostProject, currentHostDocument); _projectSnapshotManagerAccessor.Instance.DocumentAdded(toProject.HostProject, newHostDocument, textLoader); }