Exemplo n.º 1
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 7
0
        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);
        }