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); }
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); }
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); }
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); }
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); }
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); }
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)); }