public void ProjectState_WithWorkspaceProject_Changed() { // Arrange var original = ProjectState.Create(Workspace.Services, HostProject, WorkspaceProject) .WithAddedHostDocument(Documents[2], DocumentState.EmptyLoader) .WithAddedHostDocument(Documents[1], DocumentState.EmptyLoader); // Force init GC.KeepAlive(original.ProjectEngine); GC.KeepAlive(original.TagHelpers); var changed = WorkspaceProject.WithAssemblyName("Test1"); // Act var state = original.WithWorkspaceProject(changed); // Assert Assert.NotEqual(original.Version, state.Version); Assert.Same(changed, state.WorkspaceProject); Assert.Same(original.ProjectEngine, state.ProjectEngine); Assert.NotSame(original.TagHelpers, state.TagHelpers); Assert.NotSame(original.Documents[Documents[1].FilePath], state.Documents[Documents[1].FilePath]); Assert.NotSame(original.Documents[Documents[1].FilePath], state.Documents[Documents[1].FilePath]); }
public void WorkspaceProjectChanged_MadeDirty_RetainsComputedState_NotifiesListeners_AndStartsBackgroundWorker() { // Arrange ProjectManager.HostProjectAdded(HostProject); ProjectManager.WorkspaceProjectAdded(WorkspaceProject); ProjectManager.Reset(); // Generate the update var snapshot = ProjectManager.GetSnapshot(HostProject); var updateContext = snapshot.CreateUpdateContext(); ProjectManager.ProjectUpdated(updateContext); ProjectManager.Reset(); var project = WorkspaceProject.WithAssemblyName("Test1"); // Simulate a project change // Act ProjectManager.WorkspaceProjectChanged(project); // Assert snapshot = ProjectManager.GetSnapshot(project); Assert.True(snapshot.IsDirty); Assert.False(ProjectManager.ListenersNotified); Assert.True(ProjectManager.WorkerStarted); }
public void WorkspaceProjectChanged_WithoutHostProject_IgnoresWorkspaceProject() { // Arrange ProjectManager.WorkspaceProjectAdded(WorkspaceProject); ProjectManager.Reset(); var project = WorkspaceProject.WithAssemblyName("Test1"); // Simulate a project change // Act ProjectManager.WorkspaceProjectChanged(project); // Assert Assert.Empty(ProjectManager.Projects); Assert.Null(ProjectManager.ListenersNotifiedOf); }
public void WorkspaceProjectChanged_WithHostProject_NotifiesListenters() { // Arrange ProjectManager.HostProjectAdded(HostProject); ProjectManager.WorkspaceProjectAdded(WorkspaceProject); ProjectManager.Reset(); // Act ProjectManager.WorkspaceProjectChanged(WorkspaceProject.WithAssemblyName("Test1")); // Assert var snapshot = ProjectManager.GetSnapshot(WorkspaceProject); Assert.True(snapshot.IsInitialized); Assert.Equal(ProjectChangeKind.ProjectChanged, ProjectManager.ListenersNotifiedOf); }
public async Task WorkspaceProjectChange_CachesOutput() { // Arrange var original = ProjectState.Create(Workspace.Services, HostProject) .WithAddedHostDocument(HostDocument, DocumentState.EmptyLoader); var(originalOutput, originalInputVersion, originalOutputVersion) = await GetOutputAsync(original, HostDocument); // Act var state = original.WithWorkspaceProject(WorkspaceProject.WithAssemblyName("Test2")); // Assert var(actualOutput, actualInputVersion, actualOutputVersion) = await GetOutputAsync(state, HostDocument); Assert.Same(originalOutput, actualOutput); Assert.Equal(originalInputVersion, actualInputVersion); Assert.Equal(originalOutputVersion, actualOutputVersion); Assert.Equal(await state.GetComputedStateVersionAsync(new DefaultProjectSnapshot(state)), actualInputVersion); }
public void HostProjectBuildComplete_FindsChangedWorkspaceProject_AndStartsBackgroundWorker() { // Arrange Assert.True(Workspace.TryApplyChanges(WorkspaceProject.Solution)); ProjectManager.HostProjectAdded(HostProject); var project = WorkspaceProject.WithAssemblyName("Test1"); // Simulate a project change ProjectManager.WorkspaceProjectAdded(project); ProjectManager.Reset(); // Act ProjectManager.HostProjectBuildComplete(HostProject); // Assert var snapshot = ProjectManager.GetSnapshot(HostProject); Assert.True(snapshot.IsDirty); Assert.True(snapshot.IsInitialized); Assert.False(ProjectManager.ListenersNotified); Assert.True(ProjectManager.WorkerStarted); }
public void ProjectState_WithWorkspaceProject_CallsWorkspaceProjectChangeOnDocumentState() { // Arrange var callCount = 0; var documents = new Dictionary <string, DocumentState>(); documents[Documents[1].FilePath] = TestDocumentState.Create(Workspace.Services, Documents[1], onWorkspaceProjectChange: () => callCount++); documents[Documents[2].FilePath] = TestDocumentState.Create(Workspace.Services, Documents[2], onWorkspaceProjectChange: () => callCount++); var original = ProjectState.Create(Workspace.Services, HostProject, WorkspaceProject); original.Documents = documents; var changed = WorkspaceProject.WithAssemblyName("Test1"); // Act var state = original.WithWorkspaceProject(changed); // Assert Assert.NotEqual(original.Version, state.Version); Assert.Equal(2, callCount); }
public void ProjectUpdated_WhenWorkspaceProjectChanged_StillDirty_WithoutSignificantChanges_DoesNotNotifyListeners_AndStartsBackgroundWorker() { // Arrange ProjectManager.HostProjectAdded(HostProject); ProjectManager.WorkspaceProjectAdded(WorkspaceProject); ProjectManager.Reset(); // Generate an update based on the original state var snapshot = ProjectManager.GetSnapshot(HostProject); var updateContext = snapshot.CreateUpdateContext(); ProjectManager.ProjectUpdated(updateContext); ProjectManager.Reset(); var project = WorkspaceProject.WithAssemblyName("Test1"); // Simulate a project change ProjectManager.WorkspaceProjectChanged(project); ProjectManager.Reset(); // Now start computing another update snapshot = ProjectManager.GetSnapshot(HostProject); updateContext = snapshot.CreateUpdateContext(); project = project.WithAssemblyName("Test2"); // Simulate a project change ProjectManager.WorkspaceProjectChanged(project); ProjectManager.Reset(); // Act ProjectManager.ProjectUpdated(updateContext); // Still dirty because the project changed while computing the update // Assert snapshot = ProjectManager.GetSnapshot(project); Assert.True(snapshot.IsDirty); Assert.False(ProjectManager.ListenersNotified); Assert.True(ProjectManager.WorkerStarted); }