public async Task ReleaseProjectContextAsync_WhenContextThrows_SwallowsException()
        {
            var provider = CreateInstance();

            var projectContext = IWorkspaceProjectContextMockFactory.ImplementDispose(() => throw new Exception());
            var accessor       = IWorkspaceProjectContextAccessorFactory.ImplementContext(projectContext);

            await provider.ReleaseProjectContextAsync(accessor);
        }
Пример #2
0
        public async Task OpenContextForWriteAsync_WhenInitializedWithContext_CallsAction()
        {
            var accessor = IWorkspaceProjectContextAccessorFactory.Create();
            var workspaceProjectContextProvider = IWorkspaceProjectContextProviderFactory.ImplementCreateProjectContextAsync(accessor);

            var instance = await CreateInitializedInstanceAsync(workspaceProjectContextProvider : workspaceProjectContextProvider);

            IWorkspaceProjectContextAccessor result = null;
            await instance.OpenContextForWriteAsync(a => { result = a; return(Task.CompletedTask); });

            Assert.Same(accessor, result);
        }
        public async Task ReleaseProjectContextAsync_DisposesContext()
        {
            var provider = CreateInstance();

            int callCount      = 0;
            var projectContext = IWorkspaceProjectContextMockFactory.ImplementDispose(() => callCount++);
            var accessor       = IWorkspaceProjectContextAccessorFactory.ImplementContext(projectContext);

            await provider.ReleaseProjectContextAsync(accessor);

            Assert.Equal(1, callCount);
        }
Пример #4
0
        public async Task InitializedAsync_WhenInitializedWithContext_RegistersContextWithTracker()
        {
            string contextIdResult = null;
            var    activeWorkspaceProjectContextTracker = IActiveEditorContextTrackerFactory.ImplementRegisterContext(id => { contextIdResult = id; });

            var context  = IWorkspaceProjectContextMockFactory.Create();
            var accessor = IWorkspaceProjectContextAccessorFactory.ImplementContext(context, "ContextId");
            var provider = new WorkspaceProjectContextProviderMock();

            provider.ImplementCreateProjectContextAsync(project => accessor);

            var instance = await CreateInitializedInstanceAsync(workspaceProjectContextProvider : provider.Object, activeWorkspaceProjectContextTracker : activeWorkspaceProjectContextTracker);

            Assert.Equal("ContextId", contextIdResult);
        }
Пример #5
0
        public async Task Dispose_WhenInitializedWithContext_ReleasesContext()
        {
            var accessor = IWorkspaceProjectContextAccessorFactory.Create();

            IWorkspaceProjectContextAccessor result = null;
            var provider = new WorkspaceProjectContextProviderMock();

            provider.ImplementCreateProjectContextAsync(project => accessor);
            provider.ImplementReleaseProjectContextAsync(a => { result = a; });

            var instance = await CreateInitializedInstanceAsync(workspaceProjectContextProvider : provider.Object);

            await instance.DisposeAsync();

            Assert.Same(accessor, result);
        }
Пример #6
0
        public async Task OpenContextForWriteAsync_WhenProjectUnloaded_ThrowsOperationCanceled()
        {
            var tasksService = IUnconfiguredProjectTasksServiceFactory.ImplementUnloadCancellationToken(new CancellationToken(canceled: true));
            var accessor     = IWorkspaceProjectContextAccessorFactory.Create();
            var workspaceProjectContextProvider = IWorkspaceProjectContextProviderFactory.ImplementCreateProjectContextAsync(accessor);

            var instance = await CreateInitializedInstanceAsync(workspaceProjectContextProvider : workspaceProjectContextProvider, tasksService : tasksService);

            int callCount = 0;

            await Assert.ThrowsAnyAsync <OperationCanceledException>(() =>
            {
                return(instance.OpenContextForWriteAsync(c => { callCount++; return Task.CompletedTask; }));
            });

            Assert.Equal(0, callCount);
        }
Пример #7
0
        public async Task Dispose_WhenInitializedWithContext_UnregistersContextWithTracker()
        {
            IWorkspaceProjectContext result          = null;
            var activeWorkspaceProjectContextTracker = IActiveEditorContextTrackerFactory.ImplementReleaseContext(c => { result = c; });

            var context  = IWorkspaceProjectContextMockFactory.Create();
            var accessor = IWorkspaceProjectContextAccessorFactory.ImplementContext(context);
            var provider = new WorkspaceProjectContextProviderMock();

            provider.ImplementCreateProjectContextAsync(project => accessor);

            var instance = await CreateInitializedInstanceAsync(workspaceProjectContextProvider : provider.Object, activeWorkspaceProjectContextTracker : activeWorkspaceProjectContextTracker);

            await instance.DisposeAsync();

            Assert.Same(context, result);
        }
Пример #8
0
        private WorkspaceProjectContextHostInstance CreateInstance(ConfiguredProject project = null, IProjectThreadingService threadingService = null, IUnconfiguredProjectTasksService tasksService = null, IProjectSubscriptionService projectSubscriptionService = null, IActiveEditorContextTracker activeWorkspaceProjectContextTracker = null, IWorkspaceProjectContextProvider workspaceProjectContextProvider = null, IApplyChangesToWorkspaceContext applyChangesToWorkspaceContext = null)
        {
            project                              = project ?? ConfiguredProjectFactory.Create();
            threadingService                     = threadingService ?? IProjectThreadingServiceFactory.Create();
            tasksService                         = tasksService ?? IUnconfiguredProjectTasksServiceFactory.Create();
            projectSubscriptionService           = projectSubscriptionService ?? IProjectSubscriptionServiceFactory.Create();
            activeWorkspaceProjectContextTracker = activeWorkspaceProjectContextTracker ?? IActiveEditorContextTrackerFactory.Create();
            workspaceProjectContextProvider      = workspaceProjectContextProvider ?? IWorkspaceProjectContextProviderFactory.ImplementCreateProjectContextAsync(IWorkspaceProjectContextAccessorFactory.Create());
            applyChangesToWorkspaceContext       = applyChangesToWorkspaceContext ?? IApplyChangesToWorkspaceContextFactory.Create();

            return(new WorkspaceProjectContextHostInstance(project,
                                                           threadingService,
                                                           tasksService,
                                                           projectSubscriptionService,
                                                           workspaceProjectContextProvider,
                                                           activeWorkspaceProjectContextTracker,
                                                           ExportFactoryFactory.ImplementCreateValueWithAutoDispose(() => applyChangesToWorkspaceContext)));
        }
        public static IActiveWorkspaceProjectContextHost ImplementHostSpecificErrorReporter(Func <object> action)
        {
            var accessor = IWorkspaceProjectContextAccessorFactory.ImplementHostSpecificErrorReporter(action);

            return(new ActiveWorkspaceProjectContextHost(accessor));
        }
        public static IActiveWorkspaceProjectContextHost ImplementContextId(string contextId)
        {
            var accessor = IWorkspaceProjectContextAccessorFactory.ImplementContextId(contextId);

            return(new ActiveWorkspaceProjectContextHost(accessor));
        }
        private static WorkspaceProjectContextHostInstance CreateInstance(ConfiguredProject?project = null, IProjectThreadingService?threadingService = null, IUnconfiguredProjectTasksService?tasksService = null, IProjectSubscriptionService?projectSubscriptionService = null, IActiveEditorContextTracker?activeWorkspaceProjectContextTracker = null, IWorkspaceProjectContextProvider?workspaceProjectContextProvider = null, IApplyChangesToWorkspaceContext?applyChangesToWorkspaceContext = null)
        {
            project ??= ConfiguredProjectFactory.Create();
            threadingService ??= IProjectThreadingServiceFactory.Create();
            tasksService ??= IUnconfiguredProjectTasksServiceFactory.Create();
            projectSubscriptionService ??= IProjectSubscriptionServiceFactory.Create();
            activeWorkspaceProjectContextTracker ??= IActiveEditorContextTrackerFactory.Create();
            workspaceProjectContextProvider ??= IWorkspaceProjectContextProviderFactory.ImplementCreateProjectContextAsync(IWorkspaceProjectContextAccessorFactory.Create());
            applyChangesToWorkspaceContext ??= IApplyChangesToWorkspaceContextFactory.Create();
            IDataProgressTrackerService dataProgressTrackerService = IDataProgressTrackerServiceFactory.Create();

            return(new WorkspaceProjectContextHostInstance(project,
                                                           threadingService,
                                                           tasksService,
                                                           projectSubscriptionService,
                                                           workspaceProjectContextProvider,
                                                           activeWorkspaceProjectContextTracker,
                                                           ExportFactoryFactory.ImplementCreateValueWithAutoDispose(() => applyChangesToWorkspaceContext),
                                                           dataProgressTrackerService));
        }