public void ProjectManager_Changed_DocumentOpened_UninitializedProject_NotActive_Noops() { // Arrange var attemptedToSerialize = false; var hostProject = new HostProject("/path/to/project.csproj", RazorConfiguration.Default, rootNamespace: "TestRootNamespace"); var hostDocument = new HostDocument("/path/to/file.razor", "file.razor"); ProjectSnapshotManager.ProjectAdded(hostProject); ProjectSnapshotManager.DocumentAdded(hostProject, hostDocument, new EmptyTextLoader(hostDocument.FilePath)); var publisher = new TestDefaultRazorProjectChangePublisher( ProjectConfigurationFilePathStore, RazorLogger, onSerializeToFile: (snapshot, configurationFilePath) => attemptedToSerialize = true) { EnqueueDelay = 10, }; publisher.Initialize(ProjectSnapshotManager); // Act ProjectSnapshotManager.DocumentOpened(hostProject.FilePath, hostDocument.FilePath, SourceText.From(string.Empty)); // Assert Assert.Empty(publisher._deferredPublishTasks); Assert.False(attemptedToSerialize); }
public void ProjectManager_Changed_DocumentOpened_InitializedProject_NotActive_Publishes() { // Arrange var serializationSuccessful = false; var hostProject = new HostProject("/path/to/project.csproj", RazorConfiguration.Default, rootNamespace: "TestRootNamespace"); var hostDocument = new HostDocument("/path/to/file.razor", "file.razor"); ProjectSnapshotManager.ProjectAdded(hostProject); ProjectSnapshotManager.ProjectWorkspaceStateChanged(hostProject.FilePath, ProjectWorkspaceState.Default); ProjectSnapshotManager.DocumentAdded(hostProject, hostDocument, new EmptyTextLoader(hostDocument.FilePath)); var projectSnapshot = ProjectSnapshotManager.Projects[0]; var expectedConfigurationFilePath = "/path/to/obj/bin/Debug/project.razor.json"; ProjectConfigurationFilePathStore.Set(projectSnapshot.FilePath, expectedConfigurationFilePath); var publisher = new TestDefaultRazorProjectChangePublisher( ProjectConfigurationFilePathStore, RazorLogger, onSerializeToFile: (snapshot, configurationFilePath) => { Assert.Equal(expectedConfigurationFilePath, configurationFilePath); serializationSuccessful = true; }) { EnqueueDelay = 10, }; publisher.Initialize(ProjectSnapshotManager); // Act ProjectSnapshotManager.DocumentOpened(hostProject.FilePath, hostDocument.FilePath, SourceText.From(string.Empty)); // Assert Assert.Empty(publisher._deferredPublishTasks); Assert.True(serializationSuccessful); }
public async Task ProjectAdded_DoesNotPublishWithoutProjectWorkspaceStateAsync() { // Arrange var serializationSuccessful = false; var expectedConfigurationFilePath = "/path/to/obj/bin/Debug/project.razor.json"; var publisher = new TestDefaultRazorProjectChangePublisher( ProjectConfigurationFilePathStore, RazorLogger, onSerializeToFile: (snapshot, configurationFilePath) => { Assert.True(false, "Serialization should not have been atempted because there is no ProjectWorkspaceState."); serializationSuccessful = true; }) { _active = true, }; publisher.Initialize(ProjectSnapshotManager); var hostProject = new HostProject("/path/to/project.csproj", RazorConfiguration.Default, "TestRootNamespace"); ProjectConfigurationFilePathStore.Set(hostProject.FilePath, expectedConfigurationFilePath); // Act await RunOnForegroundAsync(() => ProjectSnapshotManager.ProjectAdded(hostProject)).ConfigureAwait(false); Assert.Empty(publisher._deferredPublishTasks); // Assert Assert.False(serializationSuccessful); }
public async Task ProjectAdded_DoesNotFireWhenNotReadyAsync() { // Arrange var serializationSuccessful = false; var expectedConfigurationFilePath = @"C:\path\to\obj\bin\Debug\project.razor.json"; var publisher = new TestProjectRazorJsonPublisher( ProjectConfigurationFilePathStore, onSerializeToFile: (snapshot, configurationFilePath) => { Assert.Equal(expectedConfigurationFilePath, configurationFilePath); serializationSuccessful = true; }, shouldSerialize: false) { _active = true, }; publisher.Initialize(ProjectSnapshotManager); var projectFilePath = @"C:\path\to\project.csproj"; var hostProject = new HostProject(projectFilePath, RazorConfiguration.Default, "TestRootNamespace"); ProjectConfigurationFilePathStore.Set(hostProject.FilePath, expectedConfigurationFilePath); var projectWorkspaceState = new ProjectWorkspaceState(Array.Empty <TagHelperDescriptor>(), CodeAnalysis.CSharp.LanguageVersion.Default); // Act await RunOnDispatcherThreadAsync(() => { ProjectSnapshotManager.ProjectAdded(hostProject); ProjectSnapshotManager.ProjectWorkspaceStateChanged(projectFilePath, projectWorkspaceState); }).ConfigureAwait(false); // Assert Assert.False(serializationSuccessful); }
public async Task ProjectAdded_PublishesToCorrectFilePathAsync() { // Arrange var serializationSuccessful = false; var expectedConfigurationFilePath = "/path/to/obj/bin/Debug/project.razor.json"; var publisher = new TestDefaultRazorProjectChangePublisher( ProjectConfigurationFilePathStore, _razorLogger, onSerializeToFile: (snapshot, configurationFilePath) => { Assert.Equal(expectedConfigurationFilePath, configurationFilePath); serializationSuccessful = true; }) { _active = true, }; publisher.Initialize(ProjectSnapshotManager); var projectFilePath = "/path/to/project.csproj"; var hostProject = new HostProject(projectFilePath, RazorConfiguration.Default, "TestRootNamespace"); ProjectConfigurationFilePathStore.Set(hostProject.FilePath, expectedConfigurationFilePath); var projectWorkspaceState = new ProjectWorkspaceState(Array.Empty <TagHelperDescriptor>(), CodeAnalysis.CSharp.LanguageVersion.Default); // Act await RunOnDispatcherThreadAsync(() => { ProjectSnapshotManager.ProjectAdded(hostProject); ProjectSnapshotManager.ProjectWorkspaceStateChanged(projectFilePath, projectWorkspaceState); }).ConfigureAwait(false); // Assert Assert.True(serializationSuccessful); }
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>(), 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); }
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 async Task ProjectRemoved_UnSetPublishFilePath_NoopsAsync() { // Arrange var publisher = new TestProjectRazorJsonPublisher( ProjectConfigurationFilePathStore) { _active = true, }; publisher.Initialize(ProjectSnapshotManager); var hostProject = new HostProject(@"C:\path\to\project.csproj", RazorConfiguration.Default, "TestRootNamespace"); await RunOnDispatcherThreadAsync(() => ProjectSnapshotManager.ProjectAdded(hostProject)).ConfigureAwait(false); // Act & Assert await RunOnDispatcherThreadAsync(() => ProjectSnapshotManager.ProjectRemoved(hostProject)).ConfigureAwait(false); Assert.Empty(publisher.DeferredPublishTasks); }
public async Task ProjectRemoved_UnSetPublishFilePath_NoopsAsync() { // Arrange var publisher = new TestDefaultRazorProjectChangePublisher( ProjectConfigurationFilePathStore, RazorLogger) { _active = true, }; publisher.Initialize(ProjectSnapshotManager); var hostProject = new HostProject("/path/to/project.csproj", RazorConfiguration.Default, "TestRootNamespace"); await RunOnForegroundAsync(() => ProjectSnapshotManager.ProjectAdded(hostProject)).ConfigureAwait(false); // Act & Assert await RunOnForegroundAsync(() => ProjectSnapshotManager.ProjectRemoved(hostProject)).ConfigureAwait(false); Assert.Empty(publisher._deferredPublishTasks); }
public async Task ProjectAdded_DoesNotFireWhenNotReadyAsync() { // Arrange var serializationSuccessful = false; var expectedConfigurationFilePath = "/path/to/obj/bin/Debug/project.razor.json"; var publisher = new TestDefaultRazorProjectChangePublisher( ProjectConfigurationFilePathStore, RazorLogger, onSerializeToFile: (snapshot, configurationFilePath) => { Assert.Equal(expectedConfigurationFilePath, configurationFilePath); serializationSuccessful = true; }, shouldSerialize: false) { _active = true, }; publisher.Initialize(ProjectSnapshotManager); var projectFilePath = "/path/to/project.csproj"; var hostProject = new HostProject(projectFilePath, RazorConfiguration.Default, "TestRootNamespace"); ProjectConfigurationFilePathStore.Set(hostProject.FilePath, expectedConfigurationFilePath); var projectWorkspaceState = new ProjectWorkspaceState(Array.Empty <TagHelperDescriptor>(), CodeAnalysis.CSharp.LanguageVersion.Default); // Act await RunOnForegroundAsync(() => { ProjectSnapshotManager.ProjectAdded(hostProject); ProjectSnapshotManager.ProjectWorkspaceStateChanged(projectFilePath, projectWorkspaceState); }).ConfigureAwait(false); // Assert var kvp = Assert.Single(publisher._deferredPublishTasks); await kvp.Value.ConfigureAwait(false); Assert.False(serializationSuccessful); }
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); }
public void ProjectManager_Changed_NotActive_Noops() { // Arrange var attemptedToSerialize = false; var hostProject = new HostProject(@"C:\path\to\project.csproj", RazorConfiguration.Default, rootNamespace: "TestRootNamespace"); var hostDocument = new HostDocument(@"C:\path\to\file.razor", "file.razor"); ProjectSnapshotManager.ProjectAdded(hostProject); var publisher = new TestProjectRazorJsonPublisher( ProjectConfigurationFilePathStore, onSerializeToFile: (snapshot, configurationFilePath) => attemptedToSerialize = true) { EnqueueDelay = 10, }; publisher.Initialize(ProjectSnapshotManager); // Act ProjectSnapshotManager.DocumentAdded(hostProject, hostDocument, new EmptyTextLoader(hostDocument.FilePath)); // Assert Assert.Empty(publisher.DeferredPublishTasks); Assert.False(attemptedToSerialize); }