public ProjectNotifier(ISolutionNotifier solutionNotifier, IProjectEnumerator projectEnumerator) { var hotProjectStream = solutionNotifier.SolutionOpenedStream.Select(solutionInfo => { var projectInfos = projectEnumerator.GetLoadedProjects(solutionInfo); var solutionChangeStream = solutionNotifier.ProjectAddedStream .Merge(solutionNotifier.ProjectRemovingtream) .TakeUntil(solutionNotifier.SolutionClosingStream); var emptyProjectInfos = new ProjectInfo[0]; var solutionClosedStream = solutionNotifier.SolutionClosingStream .Select(_ => emptyProjectInfos); var projectChangeStream = solutionChangeStream .Select(_ => projectEnumerator.GetLoadedProjects(solutionInfo)) .Merge(solutionClosedStream) .StartWith(projectInfos); return(projectChangeStream); }) .Switch() .Replay(1); hotProjectStream.Connect().DisposeWith(disposables); ProjectStream = hotProjectStream; }
public void it_should_notify_projects_when_solution_opened() { projectEnumerator.GetLoadedProjects(someSolution).Returns(someProjectInfos); solutionOpenedStream.OnNext(someSolution); testProjectObserver.Messages.Should().HaveCount(1); testProjectObserver.Messages.Single().Value.Value.Should().BeSameAs(someProjectInfos); }