示例#1
0
        public async Task InitializeAsync_RetrievesHostProjectManagerStateAndInitializesGuestManager()
        {
            // Arrange
            var projectHandle = new ProjectSnapshotHandleProxy(
                new Uri("vsls:/path/project.csproj"),
                RazorConfiguration.Default,
                "project",
                ProjectWorkspaceStateWithTagHelpers);
            var state = new ProjectSnapshotManagerProxyState(new[] { projectHandle });
            var hostProjectManagerProxy = Mock.Of <IProjectSnapshotManagerProxy>(
                proxy => proxy.GetProjectManagerStateAsync(It.IsAny <CancellationToken>()) == Task.FromResult(state));
            var synchronizationService = new ProjectSnapshotSynchronizationService(
                JoinableTaskFactory,
                SessionContext,
                hostProjectManagerProxy,
                ProjectSnapshotManager);

            // Act
            await synchronizationService.InitializeAsync(CancellationToken.None);

            // Assert
            var project = Assert.Single(ProjectSnapshotManager.Projects);

            Assert.Equal("/guest/path/project.csproj", project.FilePath);
            Assert.Same(RazorConfiguration.Default, project.Configuration);
            Assert.Same(ProjectWorkspaceStateWithTagHelpers.TagHelpers, project.TagHelpers);
        }
        // Internal for testing
        internal async Task <ProjectSnapshotManagerProxyState> CalculateUpdatedStateAsync(IReadOnlyList <ProjectSnapshot> projects)
        {
            using (await _latestStateSemaphore.EnterAsync().ConfigureAwait(false))
            {
                var projectHandles = new List <ProjectSnapshotHandleProxy>();
                foreach (var project in projects)
                {
                    var projectHandleProxy = ConvertToProxy(project);
                    projectHandles.Add(projectHandleProxy);
                }

                _latestState = new ProjectSnapshotManagerProxyState(projectHandles);
                return(_latestState);
            }
        }