public void ProjectConfigurationFileChanged_Added_AddAndUpdatesProject() { // Arrange var handle = new FullProjectSnapshotHandle( "path/to/project.csproj", RazorConfiguration.Default, rootNamespace: "TestRootNamespace", new ProjectWorkspaceState(Array.Empty <TagHelperDescriptor>(), LanguageVersion.CSharp5), Array.Empty <DocumentSnapshotHandle>()); var projectService = new Mock <RazorProjectService>(MockBehavior.Strict); projectService.Setup(service => service.AddProject(handle.FilePath)).Verifiable(); projectService.Setup(service => service.UpdateProject( handle.FilePath, handle.Configuration, handle.RootNamespace, handle.ProjectWorkspaceState, handle.Documents)).Verifiable(); var synchronizer = new ProjectConfigurationStateSynchronizer(Dispatcher, projectService.Object, FilePathNormalizer); var jsonFileDeserializer = CreateJsonFileDeserializer(handle); var args = new ProjectConfigurationFileChangeEventArgs("/path/to/project.razor.json", RazorFileChangeKind.Added, jsonFileDeserializer); // Act synchronizer.ProjectConfigurationFileChanged(args); // Assert projectService.VerifyAll(); }
private ProjectConfigurationStateSynchronizer GetSynchronizer(RazorProjectService razorProjectService) { var synchronizer = new ProjectConfigurationStateSynchronizer(LegacyDispatcher, razorProjectService, FilePathNormalizer); synchronizer.EnqueueDelay = 5; return(synchronizer); }
private async Task WaitForEnqueueAsync(ProjectConfigurationStateSynchronizer synchronizer, bool hasTask = true) { if (hasTask) { var kvp = Assert.Single(synchronizer._projectInfoMap); await Task.Factory.StartNew(() => kvp.Value.ProjectUpdateTask.Wait(), CancellationToken.None, TaskCreationOptions.None, Dispatcher.ForegroundScheduler); } else { Assert.Empty(synchronizer._projectInfoMap); } }
private async Task WaitForEnqueueAsync(ProjectConfigurationStateSynchronizer synchronizer, bool hasTask = true) { if (hasTask) { var kvp = Assert.Single(synchronizer.ProjectInfoMap); await LegacyDispatcher.RunOnDispatcherThreadAsync( () => kvp.Value.ProjectUpdateTask.Wait(), CancellationToken.None).ConfigureAwait(false); } else { Assert.Empty(synchronizer.ProjectInfoMap); } }
private async Task WaitForEnqueue_DispatcherThreadAsync(ProjectConfigurationStateSynchronizer synchronizer, bool hasTask = true) { Dispatcher.AssertDispatcherThread(); if (hasTask) { var kvp = Assert.Single(synchronizer.ProjectInfoMap); await kvp.Value.ProjectUpdateTask; } else { Assert.Empty(synchronizer.ProjectInfoMap); } }
public void ProjectConfigurationFileChanged_Added_CantDeserialize_Noops() { // Arrange var projectService = new Mock <RazorProjectService>(MockBehavior.Strict); var synchronizer = new ProjectConfigurationStateSynchronizer(Dispatcher, projectService.Object, FilePathNormalizer); var jsonFileDeserializer = Mock.Of <JsonFileDeserializer>(); var args = new ProjectConfigurationFileChangeEventArgs("/path/to/project.razor.json", RazorFileChangeKind.Added, jsonFileDeserializer); // Act synchronizer.ProjectConfigurationFileChanged(args); // Assert projectService.VerifyAll(); }
public void ProjectConfigurationFileChanged_Changed_CantDeserialize_ResetsProject() { // Arrange var initialHandle = new FullProjectSnapshotHandle( "path/to/project.csproj", RazorConfiguration.Default, rootNamespace: "TestRootNamespace", new ProjectWorkspaceState(Array.Empty <TagHelperDescriptor>(), LanguageVersion.CSharp5), Array.Empty <DocumentSnapshotHandle>()); var projectService = new Mock <RazorProjectService>(MockBehavior.Strict); projectService.Setup(service => service.AddProject(initialHandle.FilePath)).Verifiable(); projectService.Setup(service => service.UpdateProject( initialHandle.FilePath, initialHandle.Configuration, initialHandle.RootNamespace, initialHandle.ProjectWorkspaceState, initialHandle.Documents)).Verifiable(); var changedHandle = new FullProjectSnapshotHandle( "path/to/project.csproj", RazorConfiguration.Create( RazorLanguageVersion.Experimental, "TestConfiguration", Array.Empty <RazorExtension>()), rootNamespace: "TestRootNamespace2", new ProjectWorkspaceState(Array.Empty <TagHelperDescriptor>(), LanguageVersion.CSharp6), Array.Empty <DocumentSnapshotHandle>()); // This is the request that happens when the server is reset projectService.Setup(service => service.UpdateProject( initialHandle.FilePath, null, null, ProjectWorkspaceState.Default, Array.Empty <DocumentSnapshotHandle>())).Verifiable(); var synchronizer = new ProjectConfigurationStateSynchronizer(Dispatcher, projectService.Object, FilePathNormalizer); var addDeserializer = CreateJsonFileDeserializer(initialHandle); var addArgs = new ProjectConfigurationFileChangeEventArgs("/path/to/project.razor.json", RazorFileChangeKind.Added, addDeserializer); synchronizer.ProjectConfigurationFileChanged(addArgs); var changedDeserializer = Mock.Of <JsonFileDeserializer>(); var changedArgs = new ProjectConfigurationFileChangeEventArgs("/path/to/project.razor.json", RazorFileChangeKind.Changed, changedDeserializer); // Act synchronizer.ProjectConfigurationFileChanged(changedArgs); // Assert projectService.VerifyAll(); }