public void UpdateGuestProjectManager_ProjectAdded() { // Arrange var newHandle = new ProjectSnapshotHandleProxy( new Uri("vsls:/path/project.csproj"), RazorConfiguration.Default, "project", ProjectWorkspaceStateWithTagHelpers); var synchronizationService = new ProjectSnapshotSynchronizationService( JoinableTaskFactory, SessionContext, Mock.Of <IProjectSnapshotManagerProxy>(), ProjectSnapshotManager); var args = new ProjectChangeEventProxyArgs(older: null, newHandle, ProjectProxyChangeKind.ProjectAdded); // Act synchronizationService.UpdateGuestProjectManager(args); // Assert var project = Assert.Single(ProjectSnapshotManager.Projects); Assert.Equal("/guest/path/project.csproj", project.FilePath); Assert.Same(RazorConfiguration.Default, project.Configuration); Assert.Same(ProjectWorkspaceStateWithTagHelpers.TagHelpers, project.TagHelpers); }
// Internal for testing internal void UpdateGuestProjectManager(ProjectChangeEventProxyArgs args) { if (args.Kind == ProjectProxyChangeKind.ProjectAdded) { var guestPath = ResolveGuestPath(args.ProjectFilePath); var hostProject = new HostProject(guestPath, args.Newer.Configuration, args.Newer.RootNamespace); _projectSnapshotManager.ProjectAdded(hostProject); if (args.Newer.ProjectWorkspaceState != null) { _projectSnapshotManager.ProjectWorkspaceStateChanged(guestPath, args.Newer.ProjectWorkspaceState); } } else if (args.Kind == ProjectProxyChangeKind.ProjectRemoved) { var guestPath = ResolveGuestPath(args.ProjectFilePath); var hostProject = new HostProject(guestPath, args.Older.Configuration, args.Older.RootNamespace); _projectSnapshotManager.ProjectRemoved(hostProject); } else if (args.Kind == ProjectProxyChangeKind.ProjectChanged) { if (!args.Older.Configuration.Equals(args.Newer.Configuration)) { var guestPath = ResolveGuestPath(args.Newer.FilePath); var hostProject = new HostProject(guestPath, args.Newer.Configuration, args.Newer.RootNamespace); _projectSnapshotManager.ProjectConfigurationChanged(hostProject); } else if (args.Older.ProjectWorkspaceState != args.Newer.ProjectWorkspaceState || args.Older.ProjectWorkspaceState?.Equals(args.Newer.ProjectWorkspaceState) == false) { var guestPath = ResolveGuestPath(args.Newer.FilePath); _projectSnapshotManager.ProjectWorkspaceStateChanged(guestPath, args.Newer.ProjectWorkspaceState); } } }
private void ProjectSnapshotManager_Changed(object sender, ProjectChangeEventArgs args) { _foregroundDispatcher.AssertForegroundThread(); if (_disposed) { return; } if (args.Kind == ProjectChangeKind.DocumentAdded || args.Kind == ProjectChangeKind.DocumentRemoved || args.Kind == ProjectChangeKind.DocumentChanged) { // Razor LiveShare doesn't currently support document based notifications over the wire. return; } _processingChangedEventTestTask = _joinableTaskFactory.RunAsync(async() => { var projects = await GetLatestProjectsAsync(); await _joinableTaskFactory.SwitchToMainThreadAsync(); var oldProjectProxy = ConvertToProxy(args.Older); var newProjectProxy = ConvertToProxy(args.Newer); var remoteProjectChangeArgs = new ProjectChangeEventProxyArgs(oldProjectProxy, newProjectProxy, (ProjectProxyChangeKind)args.Kind); OnChanged(remoteProjectChangeArgs); }); }
public void UpdateGuestProjectManager_ProjectChanged_ConfigurationChange() { // Arrange var oldHandle = new ProjectSnapshotHandleProxy( new Uri("vsls:/path/project.csproj"), RazorConfiguration.Default, "project", projectWorkspaceState: null); var newConfiguration = RazorConfiguration.Create(RazorLanguageVersion.Version_1_0, "Custom-1.0", Enumerable.Empty <RazorExtension>()); var newHandle = new ProjectSnapshotHandleProxy( oldHandle.FilePath, newConfiguration, oldHandle.RootNamespace, oldHandle.ProjectWorkspaceState); var synchronizationService = new ProjectSnapshotSynchronizationService( JoinableTaskFactory, SessionContext, Mock.Of <IProjectSnapshotManagerProxy>(), ProjectSnapshotManager); var hostProject = new HostProject("/guest/path/project.csproj", RazorConfiguration.Default, "project"); ProjectSnapshotManager.ProjectAdded(hostProject); ProjectSnapshotManager.ProjectConfigurationChanged(hostProject); var args = new ProjectChangeEventProxyArgs(oldHandle, newHandle, ProjectProxyChangeKind.ProjectChanged); // Act synchronizationService.UpdateGuestProjectManager(args); // Assert var project = Assert.Single(ProjectSnapshotManager.Projects); Assert.Equal("/guest/path/project.csproj", project.FilePath); Assert.Same(newConfiguration, project.Configuration); Assert.Empty(project.TagHelpers); }
public void UpdateGuestProjectManager_ProjectChanged_ProjectWorkspaceStateChange() { // Arrange var oldHandle = new ProjectSnapshotHandleProxy( new Uri("vsls:/path/project.csproj"), RazorConfiguration.Default, "project", ProjectWorkspaceState.Default); var newProjectWorkspaceState = ProjectWorkspaceStateWithTagHelpers; var newHandle = new ProjectSnapshotHandleProxy( oldHandle.FilePath, oldHandle.Configuration, oldHandle.RootNamespace, newProjectWorkspaceState); var synchronizationService = new ProjectSnapshotSynchronizationService( JoinableTaskFactory, SessionContext, Mock.Of <IProjectSnapshotManagerProxy>(MockBehavior.Strict), ProjectSnapshotManager); var hostProject = new HostProject("/guest/path/project.csproj", RazorConfiguration.Default, "project"); ProjectSnapshotManager.ProjectAdded(hostProject); ProjectSnapshotManager.ProjectWorkspaceStateChanged(hostProject.FilePath, oldHandle.ProjectWorkspaceState); var args = new ProjectChangeEventProxyArgs(oldHandle, newHandle, ProjectProxyChangeKind.ProjectChanged); // Act synchronizationService.UpdateGuestProjectManager(args); // Assert var project = Assert.Single(ProjectSnapshotManager.Projects); Assert.Equal("/guest/path/project.csproj", project.FilePath); Assert.Same(RazorConfiguration.Default, project.Configuration); Assert.Same(newProjectWorkspaceState.TagHelpers, project.TagHelpers); }
private void OnChanged(ProjectChangeEventProxyArgs args) { _foregroundDispatcher.AssertForegroundThread(); if (_disposed) { return; } Changed?.Invoke(this, args); }
private void OnChanged(ProjectChangeEventProxyArgs args) { _projectSnapshotManagerDispatcher.AssertDispatcherThread(); if (_disposed) { return; } Changed?.Invoke(this, args); }
private async void HostProxyProjectManager_Changed(object sender, ProjectChangeEventProxyArgs args) { if (args == null) { throw new ArgumentNullException(nameof(args)); } try { await _joinableTaskFactory.SwitchToMainThreadAsync(); UpdateGuestProjectManager(args); } catch (Exception ex) { _projectSnapshotManager.ReportError(ex); } }
public void UpdateGuestProjectManager_ProjectRemoved() { // Arrange var olderHandle = new ProjectSnapshotHandleProxy( new Uri("vsls:/path/project.csproj"), RazorConfiguration.Default, projectWorkspaceState: null); var synchronizationService = new ProjectSnapshotSynchronizationService( JoinableTaskFactory, SessionAccessor, Mock.Of <IProjectSnapshotManagerProxy>(), ProjectSnapshotManager); var hostProject = new HostProject("/guest/path/project.csproj", RazorConfiguration.Default); ProjectSnapshotManager.ProjectAdded(hostProject); var args = new ProjectChangeEventProxyArgs(olderHandle, newer: null, ProjectProxyChangeKind.ProjectRemoved); // Act synchronizationService.UpdateGuestProjectManager(args); // Assert Assert.Empty(ProjectSnapshotManager.Projects); }