Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
        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;
            }
        }
Exemplo n.º 3
0
        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;
            }
        }
Exemplo n.º 4
0
        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;
            }
        }
Exemplo n.º 5
0
        /// <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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
 public LazyComponentGetter(MockComponentModel model) : base(() => (T)model.GetService(typeof(T)))
 {
 }
Exemplo n.º 8
0
 public MockServiceProvider(MockComponentModel componentModel)
 {
     _componentModel = componentModel;
 }
Exemplo n.º 9
0
 public MockServiceProvider(ExportProvider exportProvider)
 {
     _componentModel = new MockComponentModel(exportProvider);
 }
 public MockServiceProvider(ExportProvider exportProvider)
 {
     _componentModel = new MockComponentModel(exportProvider);
 }
 public MockServiceProvider(MockComponentModel componentModel)
 {
     _componentModel = componentModel;
 }