public static Tuple<TestWorkspace, EnvDTE.FileCodeModel> CreateWorkspaceAndFileCodeModel(string file) { var workspace = CSharpWorkspaceFactory.CreateWorkspaceFromFile(file, exportProvider: VisualStudioTestExportProvider.ExportProvider); try { var project = workspace.CurrentSolution.Projects.Single(); var document = project.Documents.Single().Id; var componentModel = new MockComponentModel(workspace.ExportProvider); var serviceProvider = new MockServiceProvider(componentModel); WrapperPolicy.s_ComWrapperFactory = MockComWrapperFactory.Instance; var visualStudioWorkspaceMock = new MockVisualStudioWorkspace(workspace); var state = new CodeModelState(serviceProvider, project.LanguageServices, visualStudioWorkspaceMock); var codeModel = FileCodeModel.Create(state, null, document, new MockTextManagerAdapter()).Handle; return Tuple.Create(workspace, (EnvDTE.FileCodeModel)codeModel); } catch { // We threw during creation of the FileCodeModel. Make sure we clean up our workspace or else we leak it workspace.Dispose(); throw; } }
public static Tuple <TestWorkspace, EnvDTE.FileCodeModel> CreateWorkspaceAndFileCodeModel(string file) { var workspace = CSharpWorkspaceFactory.CreateWorkspaceFromFile(file, exportProvider: VisualStudioTestExportProvider.ExportProvider); try { var project = workspace.CurrentSolution.Projects.Single(); var document = project.Documents.Single().Id; var componentModel = new MockComponentModel(workspace.ExportProvider); var serviceProvider = new MockServiceProvider(componentModel); var visualStudioWorkspaceMock = new MockVisualStudioWorkspace(workspace); var state = new CodeModelState(serviceProvider, project.LanguageServices, visualStudioWorkspaceMock); var codeModel = FileCodeModel.Create(state, null, document, new MockTextManagerAdapter()).Handle; return(Tuple.Create(workspace, (EnvDTE.FileCodeModel)codeModel)); } catch { // We threw during creation of the FileCodeModel. Make sure we clean up our workspace or else we leak it workspace.Dispose(); throw; } }
public static Tuple <TestWorkspace, EnvDTE.FileCodeModel> CreateWorkspaceAndFileCodeModel(string file) { var workspace = TestWorkspace.CreateCSharp(file, exportProvider: VisualStudioTestExportProvider.Factory.CreateExportProvider()); try { var project = workspace.CurrentSolution.Projects.Single(); var document = project.Documents.Single().Id; var componentModel = new MockComponentModel(workspace.ExportProvider); var serviceProvider = new MockServiceProvider(componentModel); WrapperPolicy.s_ComWrapperFactory = MockComWrapperFactory.Instance; var visualStudioWorkspaceMock = new MockVisualStudioWorkspace(workspace); var threadingContext = workspace.ExportProvider.GetExportedValue <IThreadingContext>(); var state = new CodeModelState( threadingContext, serviceProvider, project.LanguageServices, visualStudioWorkspaceMock, new ProjectCodeModelFactory(visualStudioWorkspaceMock, serviceProvider, threadingContext)); var codeModel = FileCodeModel.Create(state, null, document, new MockTextManagerAdapter()).Handle; return(Tuple.Create(workspace, (EnvDTE.FileCodeModel)codeModel)); } catch { // We threw during creation of the FileCodeModel. Make sure we clean up our workspace or else we leak it workspace.Dispose(); throw; } }
public static (TestWorkspace workspace, VisualStudioWorkspace extraWorkspaceToDisposeButNotUse, EnvDTE.FileCodeModel fileCodeModel) CreateWorkspaceAndFileCodeModel( string file ) { var workspace = TestWorkspace.CreateCSharp( file, composition: VisualStudioTestCompositions.LanguageServices ); try { var project = workspace.CurrentSolution.Projects.Single(); var document = project.Documents.Single().Id; var componentModel = new MockComponentModel(workspace.ExportProvider); var serviceProvider = new MockServiceProvider(componentModel); WrapperPolicy.s_ComWrapperFactory = MockComWrapperFactory.Instance; var visualStudioWorkspaceMock = new MockVisualStudioWorkspace(workspace); var threadingContext = workspace.ExportProvider.GetExportedValue <IThreadingContext>(); var notificationService = workspace.ExportProvider.GetExportedValue <IForegroundNotificationService>(); var listenerProvider = workspace.ExportProvider.GetExportedValue <AsynchronousOperationListenerProvider>(); var state = new CodeModelState( threadingContext, serviceProvider, project.LanguageServices, visualStudioWorkspaceMock, new ProjectCodeModelFactory( visualStudioWorkspaceMock, serviceProvider, threadingContext, notificationService, listenerProvider ) ); var codeModel = FileCodeModel.Create( state, null, document, new MockTextManagerAdapter() ).Handle; return(workspace, visualStudioWorkspaceMock, codeModel); } catch { // We threw during creation of the FileCodeModel. Make sure we clean up our workspace or else we leak it workspace.Dispose(); throw; } }
/// <summary> /// Sets up a limited service provider which can be used for testing. /// /// This will not include many of the services which are typically available in /// VS but is suitable for simple test cases which need just some base functionality. /// </summary> public static MockServiceProvider CreateMockServiceProvider( bool suppressTaskProvider = true ) { var componentModel = new MockComponentModel(); var serviceProvider = new MockServiceProvider(componentModel); componentModel.AddExtension( typeof(IErrorProviderFactory), () => new MockErrorProviderFactory() ); componentModel.AddExtension( typeof(IContentTypeRegistryService), CreateContentTypeRegistryService ); componentModel.AddExtension( typeof(IInteractiveWindowCommandsFactory), () => new MockInteractiveWindowCommandsFactory() ); var optService = new Lazy <MockInterpreterOptionsService>(() => new MockInterpreterOptionsService()); componentModel.AddExtension <IInterpreterRegistryService>(() => optService.Value); componentModel.AddExtension <IInterpreterOptionsService>(() => optService.Value); var editorServices = CreatePythonEditorServices(serviceProvider, componentModel); componentModel.AddExtension(() => editorServices); if (suppressTaskProvider) { serviceProvider.AddService(typeof(ErrorTaskProvider), null, true); serviceProvider.AddService(typeof(CommentTaskProvider), null, true); } else { serviceProvider.AddService(typeof(ErrorTaskProvider), CreateTaskProviderService, true); serviceProvider.AddService(typeof(CommentTaskProvider), CreateTaskProviderService, true); } serviceProvider.AddService(typeof(UIThreadBase), new MockUIThread()); var optionsService = new MockPythonToolsOptionsService(); serviceProvider.AddService(typeof(IPythonToolsOptionsService), optionsService, true); var ptvsService = new PythonToolsService(serviceProvider); serviceProvider.AddService(typeof(PythonToolsService), ptvsService); return(serviceProvider); }
private static PythonEditorServices CreatePythonEditorServices(IServiceContainer site, MockComponentModel model) { var services = new PythonEditorServices(site); // We don't have a full composition service availabe, to this code emulates // ComponentModel.DefaultCompositionService.SatisfyImportsOnce(services) // *just* enough for PythonEditorServices. foreach (var field in services.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)) { if (!field.GetCustomAttributes().OfType <ImportAttribute>().Any()) { continue; } if (!field.FieldType.IsGenericType || field.FieldType.GetGenericTypeDefinition() != typeof(Lazy <>)) { field.SetValue(services, model.GetService(field.FieldType)); } else { var svcType = field.FieldType.GetGenericArguments()[0]; var svc = model.GetService(svcType); field.SetValue( services, Activator.CreateInstance(typeof(LazyComponentGetter <>).MakeGenericType(svcType), model) ); } } return(services); }
public LazyComponentGetter(MockComponentModel model) : base(() => (T)model.GetService(typeof(T))) { }
public MockServiceProvider(MockComponentModel componentModel) { _componentModel = componentModel; }
public MockServiceProvider(ExportProvider exportProvider) { _componentModel = new MockComponentModel(exportProvider); }
public MockServiceProvider(ExportProvider exportProvider) { _componentModel = new MockComponentModel(exportProvider); }
public MockServiceProvider(MockComponentModel componentModel) { _componentModel = componentModel; }