Example #1
0
        public async Task ShowProjectDesignerAsync_WhenOpenedInInternalEditor_ShowsWindow()
        {
            Guid editorGuid = Guid.NewGuid();

            var hierarchy = IVsHierarchyFactory.Create();

            hierarchy.ImplementGetProperty(VsHierarchyPropID.SupportsProjectDesigner, result: true);
            hierarchy.ImplementGetGuid(VsHierarchyPropID.ProjectDesignerEditor, result: editorGuid);
            var project = (IVsProject4)hierarchy;

            int callCount = 0;
            var frame     = IVsWindowFrameFactory.ImplementShow(() => { callCount++; return(0); });

            project.ImplementOpenItemWithSpecific(editorGuid, VSConstants.LOGVIEWID_Primary, frame);

            var projectVsServices = IUnconfiguredProjectVsServicesFactory.Implement(() => hierarchy, () => project);

            var designerService = CreateInstance(projectVsServices);

#pragma warning disable RS0003 // Do not directly await a Task (see https://github.com/dotnet/roslyn/issues/6770)
            await designerService.ShowProjectDesignerAsync();

#pragma warning restore RS0003 // Do not directly await a Task

            Assert.Equal(1, callCount);
        }
Example #2
0
        public async Task ShowProjectDesignerAsync_WhenWindowShowReturnsHResult_Throws()
        {
            Guid editorGuid = Guid.NewGuid();

            var hierarchy = IVsHierarchyFactory.Create();

            hierarchy.ImplementGetProperty(VsHierarchyPropID.SupportsProjectDesigner, result: true);
            hierarchy.ImplementGetGuid(VsHierarchyPropID.ProjectDesignerEditor, result: editorGuid);
            var project = (IVsProject4)hierarchy;

            var frame = IVsWindowFrameFactory.ImplementShow(() => VSConstants.E_FAIL);

            project.ImplementOpenItemWithSpecific(editorGuid, VSConstants.LOGVIEWID_Primary, frame);

            var projectVsServices = IUnconfiguredProjectVsServicesFactory.Implement(() => hierarchy, () => project);

            var designerService = CreateInstance(projectVsServices);

#pragma warning disable RS0003 // Do not directly await a Task (see https://github.com/dotnet/roslyn/issues/6770)
            await Assert.ThrowsAsync <COMException>(() => {
                return(designerService.ShowProjectDesignerAsync());
            });

#pragma warning restore RS0003 // Do not directly await a Task
        }
        private static DesignTimeAssemblyResolution CreateInstance(IVsHierarchy hierarchy = null)
        {
            hierarchy = hierarchy ?? IVsHierarchyFactory.Create();

            IUnconfiguredProjectVsServices projectVsServices = IUnconfiguredProjectVsServicesFactory.Implement(() => hierarchy);

            return(new DesignTimeAssemblyResolution(projectVsServices));
        }
        internal AbstractAddClassProjectCommand CreateInstance(IPhysicalProjectTree projectTree = null, IUnconfiguredProjectVsServices projectVsServices = null, Shell.SVsServiceProvider serviceProvider = null, IProjectTreeProvider provider = null, IVsAddProjectItemDlg dlg = null)
        {
            projectTree       = projectTree ?? IPhysicalProjectTreeFactory.Create(provider);
            projectVsServices = projectVsServices ?? IUnconfiguredProjectVsServicesFactory.Implement(threadingServiceCreator: () => IProjectThreadingServiceFactory.Create());
            serviceProvider   = serviceProvider ?? SVsServiceProviderFactory.Create(dlg);

            return(CreateInstance(projectTree, projectVsServices, serviceProvider));
        }
Example #5
0
        internal AbstractAddClassProjectCommand CreateInstance(IPhysicalProjectTree projectTree = null, IUnconfiguredProjectVsServices projectVsServices = null, IProjectTreeProvider provider = null, IVsAddProjectItemDlg addItemDialog = null)
        {
            projectTree       = projectTree ?? IPhysicalProjectTreeFactory.Create(provider);
            projectVsServices = projectVsServices ?? IUnconfiguredProjectVsServicesFactory.Implement(threadingServiceCreator: () => IProjectThreadingServiceFactory.Create());
            var addItemDialogService = IVsUIServiceFactory.Create <SVsAddProjectItemDlg, IVsAddProjectItemDlg>(addItemDialog);

            return(CreateInstance(projectTree, projectVsServices, addItemDialogService));
        }
        private static IUnconfiguredProjectVsServices CreateProjectServices(string?version)
        {
            var project = UnconfiguredProjectFactory.Create();
            var data    = new PropertyPageData(ConfigurationGeneral.SchemaName, ConfigurationGeneral.NETCoreSdkVersionProperty, version ?? string.Empty);

            var projectProperties = ProjectPropertiesFactory.Create(project, data);

            return(IUnconfiguredProjectVsServicesFactory.Implement(projectProperties: () => projectProperties));
        }
Example #7
0
        public void SupportsProjectDesigner_WhenHierarchyGetPropertyReturnsHResult_ThrowsCOMException()
        {
            var hierarchy         = IVsHierarchyFactory.ImplementGetProperty(hr: VSConstants.E_FAIL);
            var projectVsServices = IUnconfiguredProjectVsServicesFactory.Implement(() => hierarchy);

            var designerService = CreateInstance(projectVsServices);

            Assert.Throws <COMException>(() => {
                var result = designerService.SupportsProjectDesigner;
            });
        }
Example #8
0
        public void SupportsProjectDesigner_ReturnsResultOfHierarchyGetProperty(bool supportsProjectDesigner)
        {
            var hierarchy         = IVsHierarchyFactory.ImplementGetProperty(result: supportsProjectDesigner);
            var projectVsServices = IUnconfiguredProjectVsServicesFactory.Implement(() => hierarchy);

            var designerService = CreateInstance(projectVsServices);

            var result = designerService.SupportsProjectDesigner;

            Assert.Equal(supportsProjectDesigner, result);
        }
Example #9
0
        public void ShowProjectDesignerAsync_WhenSupportsProjectDesignerFalse_ThrowsInvalidOperation()
        {
            var hierarchy         = IVsHierarchyFactory.ImplementGetProperty(result: false);
            var projectVsServices = IUnconfiguredProjectVsServicesFactory.Implement(() => hierarchy);

            var designerService = CreateInstance(projectVsServices);

            Assert.Throws <InvalidOperationException>(() => {
                designerService.ShowProjectDesignerAsync();
            });
        }
Example #10
0
        public void SupportsProjectDesigner_WhenHierarchyGetPropertyReturnsMemberNotFound_IsFalse()
        {
            var hierarchy         = IVsHierarchyFactory.ImplementGetProperty(hr: VSConstants.DISP_E_MEMBERNOTFOUND);
            var projectVsServices = IUnconfiguredProjectVsServicesFactory.Implement(() => hierarchy);

            var designerService = CreateInstance(projectVsServices);

            var result = designerService.SupportsProjectDesigner;

            Assert.False(result);
        }
        public async Task ShowProjectDesignerAsync_WhenProjectDesignerEditorReturnsHResult_Throws()
        {
            var vsProjectDesignerPageService = IVsProjectDesignerPageServiceFactory.ImplementIsProjectDesignerSupported(() => true);

            var hierarchy = IVsHierarchyFactory.Create();

            hierarchy.ImplementGetGuid(VsHierarchyPropID.ProjectDesignerEditor, VSConstants.E_FAIL);

            var projectVsServices = IUnconfiguredProjectVsServicesFactory.Implement(() => hierarchy);

            var designerService = CreateInstance(projectVsServices, vsProjectDesignerPageService);

            await Assert.ThrowsAsync <COMException>(designerService.ShowProjectDesignerAsync);
        }
        private static IUnconfiguredProjectVsServices CreateProjectServices(string version)
        {
            var setValues = new List <object>();
            var project   = UnconfiguredProjectFactory.Create();
            var data      = new PropertyPageData()
            {
                Category     = ConfigurationGeneral.SchemaName,
                PropertyName = ConfigurationGeneral.NETCoreSdkVersionProperty,
                Value        = version ?? string.Empty,
            };

            var projectProperties       = ProjectPropertiesFactory.Create(project, data);
            var activeConfiguredProject = ActiveConfiguredProjectFactory.ImplementValue(() => projectProperties);

            return(IUnconfiguredProjectVsServicesFactory.Implement(projectProperties: () => projectProperties));
        }
        private StartupProjectRegistrar CreateInstance(
            Guid guid,
            SVsServiceProvider serviceProvider,
            ActiveConfiguredProject <StartupProjectRegistrar.DebuggerLaunchProviders> launchProviders)
        {
            var projectProperties = ProjectPropertiesFactory.Create(IUnconfiguredProjectFactory.Create(), new[] {
                new PropertyPageData {
                    Category = "ConfigurationGeneral", PropertyName = "ProjectGuid", Value = guid.ToString()
                }
            });

            return(CreateInstance(
                       IUnconfiguredProjectVsServicesFactory.Implement(projectProperties: () => projectProperties),
                       serviceProvider,
                       launchProviders));
        }
        internal async Task RenameAsync(string sourceCode, string oldFilePath, string newFilePath,
                                        IUserNotificationServices userNotificationServices,
                                        IRoslynServices roslynServices,
                                        IVsOnlineServices vsOnlineServices,
                                        string language,
                                        IVsService <SVsSettingsPersistenceManager, ISettingsManager> settingsManagerService)
        {
            var unconfiguredProject = UnconfiguredProjectFactory.Create(fullPath: $@"C:\project1.{ProjectFileExtension}");
            var projectServices     = IUnconfiguredProjectVsServicesFactory.Implement(
                threadingServiceCreator: () => IProjectThreadingServiceFactory.Create(),
                unconfiguredProjectCreator: () => unconfiguredProject);

            using var ws = new AdhocWorkspace();
            ws.AddSolution(InitializeWorkspace(ProjectId.CreateNewId(), oldFilePath, sourceCode, language));

            var environmentOptionsFactory       = IEnvironmentOptionsFactory.Implement((string category, string page, string property, bool defaultValue) => { return(true); });
            var waitIndicator                   = (new Mock <IWaitIndicator>()).Object;
            var projectAsynchronousTasksService = IProjectAsynchronousTasksServiceFactory.Create();
            var projectThreadingService         = IProjectThreadingServiceFactory.Create();
            var refactorNotifyService           = (new Mock <IRefactorNotifyService>()).Object;
            var extensibility                   = new Mock <IVsUIService <IVsExtensibility, IVsExtensibility3> >().Object;
            var operationProgressMock           = new Mock <IVsService <SVsOperationProgress, IVsOperationProgressStatusService> >().Object;
            var context = new Mock <IProjectTreeActionHandlerContext>().Object;

            var mockNode = new Mock <IProjectTree>();

            mockNode.SetupGet(x => x.FilePath).Returns(oldFilePath);
            mockNode.SetupGet(x => x.IsFolder).Returns(false);
            var node = mockNode.Object;

            var renamer = new TestRenamerProjectTreeActionHandler(unconfiguredProject,
                                                                  projectServices,
                                                                  ws,
                                                                  environmentOptionsFactory,
                                                                  userNotificationServices,
                                                                  roslynServices,
                                                                  waitIndicator,
                                                                  vsOnlineServices,
                                                                  projectAsynchronousTasksService,
                                                                  projectThreadingService,
                                                                  extensibility,
                                                                  operationProgressMock,
                                                                  settingsManagerService);

            await renamer.RenameAsync(context, node, newFilePath)
            .TimeoutAfter(TimeSpan.FromSeconds(1));
        }
Example #15
0
        public async Task ShowProjectDesignerAsync_WhenProjectDesignerEditorReturnsHResult_Throws()
        {
            var hierarchy = IVsHierarchyFactory.Create();

            hierarchy.ImplementGetProperty(VsHierarchyPropID.SupportsProjectDesigner, result: true);
            hierarchy.ImplementGetGuid(VsHierarchyPropID.ProjectDesignerEditor, VSConstants.E_FAIL);

            var projectVsServices = IUnconfiguredProjectVsServicesFactory.Implement(() => hierarchy);

            var designerService = CreateInstance(projectVsServices);

#pragma warning disable RS0003 // Do not directly await a Task (see https://github.com/dotnet/roslyn/issues/6770)
            await Assert.ThrowsAsync <COMException>(() => {
                return(designerService.ShowProjectDesignerAsync());
            });

#pragma warning restore RS0003 // Do not directly await a Task
        }
        public Task ShowProjectDesignerAsync_WhenOpenedInExternalEditor_DoesNotAttemptToShowWindow()
        {   // OpenItemWithSpecific returns null frame when opened in external editor

            var vsProjectDesignerPageService = IVsProjectDesignerPageServiceFactory.ImplementIsProjectDesignerSupported(() => true);

            var editorGuid = Guid.NewGuid();

            var hierarchy = IVsHierarchyFactory.Create();
            hierarchy.ImplementGetGuid(VsHierarchyPropID.ProjectDesignerEditor, result: editorGuid);

            var project = (IVsProject4)hierarchy;
            project.ImplementOpenItemWithSpecific(editorGuid, VSConstants.LOGVIEWID_Primary, (IVsWindowFrame?)null);

            var projectVsServices = IUnconfiguredProjectVsServicesFactory.Implement(() => hierarchy, () => project);

            var designerService = CreateInstance(projectVsServices, vsProjectDesignerPageService);

            return designerService.ShowProjectDesignerAsync();
        }
        private static ConsoleDebugTargetsProvider CreateInstance(
            ConfiguredProject?configuredProject = null,
            IDebugTokenReplacer?tokenReplacer   = null,
            IFileSystem?fileSystem         = null,
            IEnvironmentHelper?environment = null,
            IActiveDebugFrameworkServices?activeDebugFramework = null,
            ProjectProperties?properties = null,
            IProjectThreadingService?threadingService = null,
            IVsDebugger10?debugger = null)
        {
            environment ??= Mock.Of <IEnvironmentHelper>();
            tokenReplacer ??= IDebugTokenReplacerFactory.Create();
            activeDebugFramework ??= IActiveDebugFrameworkServicesFactory.ImplementGetConfiguredProjectForActiveFrameworkAsync(configuredProject);
            threadingService ??= IProjectThreadingServiceFactory.Create();
            debugger ??= IVsDebugger10Factory.ImplementIsIntegratedConsoleEnabled(enabled: false);

            IUnconfiguredProjectVsServices unconfiguredProjectVsServices = IUnconfiguredProjectVsServicesFactory.Implement(() => IVsHierarchyFactory.Create());

            return(new ConsoleDebugTargetsProvider(unconfiguredProjectVsServices, configuredProject, tokenReplacer, fileSystem, environment, activeDebugFramework, properties, threadingService, IVsUIServiceFactory.Create <SVsShellDebugger, IVsDebugger10>(debugger)));
        }
        public async Task ShowProjectDesignerAsync_WhenOpenItemWithSpecificEditorReturnsHResult_Throws()
        {
            var vsProjectDesignerPageService = IVsProjectDesignerPageServiceFactory.ImplementIsProjectDesignerSupported(() => true);

            var editorGuid = Guid.NewGuid();

            var hierarchy = IVsHierarchyFactory.Create();

            hierarchy.ImplementGetGuid(VsHierarchyPropID.ProjectDesignerEditor, result: editorGuid);

            var project = (IVsProject4)hierarchy;

            project.ImplementOpenItemWithSpecific(editorGuid, VSConstants.LOGVIEWID_Primary, VSConstants.E_FAIL);

            var projectVsServices = IUnconfiguredProjectVsServicesFactory.Implement(() => hierarchy, () => project);

            var designerService = CreateInstance(projectVsServices, vsProjectDesignerPageService);

            await Assert.ThrowsAsync <COMException>(designerService.ShowProjectDesignerAsync);
        }
Example #19
0
        internal async Task RenameAsync(string sourceCode, string oldFilePath, string newFilePath, IUserNotificationServices userNotificationServices, IRoslynServices roslynServices, IVsOnlineServices vsOnlineServices, string language)
        {
            using var ws = new AdhocWorkspace();
            ws.AddSolution(InitializeWorkspace(ProjectId.CreateNewId(), newFilePath, sourceCode, language));

            var unconfiguredProject = UnconfiguredProjectFactory.Create(filePath: $@"C:\project1.{ProjectFileExtension}");
            var projectServices     = IUnconfiguredProjectVsServicesFactory.Implement(
                threadingServiceCreator: () => IProjectThreadingServiceFactory.Create(),
                unconfiguredProjectCreator: () => unconfiguredProject);
            var unconfiguredProjectTasksService = IUnconfiguredProjectTasksServiceFactory.Create();
            var environmentOptionsFactory       = IEnvironmentOptionsFactory.Implement((string category, string page, string property, bool defaultValue) => { return(true); });
            var waitIndicator         = (new Mock <IWaitIndicator>()).Object;
            var refactorNotifyService = (new Mock <IRefactorNotifyService>()).Object;

            var dte = IVsUIServiceFactory.Create <Shell.Interop.SDTE, EnvDTE.DTE>(null !);

            var renamer = new Renamer(projectServices, unconfiguredProjectTasksService, ws, dte, environmentOptionsFactory, userNotificationServices, roslynServices, waitIndicator, refactorNotifyService, vsOnlineServices);
            await renamer.HandleRenameAsync(oldFilePath, newFilePath)
            .TimeoutAfter(TimeSpan.FromSeconds(1));
        }
        internal AbstractAddItemCommandHandler CreateInstance(IPhysicalProjectTree projectTree = null, IUnconfiguredProjectVsServices projectVsServices = null, IProjectTreeProvider provider = null, IVsAddProjectItemDlg addItemDialog = null, string capability = null)
        {
            var configuredProject = ConfiguredProjectFactory.Create(IProjectCapabilitiesScopeFactory.Create(new string[] { capability ?? TestAddItemCommand.Capability }));

            projectTree ??= IPhysicalProjectTreeFactory.Create(provider);
            projectVsServices ??= IUnconfiguredProjectVsServicesFactory.Implement(
                threadingServiceCreator: () => IProjectThreadingServiceFactory.Create()
                );
            var addItemDialogService = IVsUIServiceFactory.Create <SVsAddProjectItemDlg, IVsAddProjectItemDlg>(addItemDialog);

            string result      = "DirName";
            var    vsShellMock = new Mock <IVsShell>();

            vsShellMock.Setup(x => x.LoadPackageString(ref It.Ref <Guid> .IsAny, (uint)TestAddItemCommand.ResourceIds.DirName, out result)).Returns(0);
            result = "TemplateName";
            vsShellMock.Setup(x => x.LoadPackageString(ref It.Ref <Guid> .IsAny, (uint)TestAddItemCommand.ResourceIds.TemplateName, out result)).Returns(0);

            var vsShellService = IVsUIServiceFactory.Create <SVsShell, IVsShell>(vsShellMock.Object);

            return(new TestAddItemCommand(configuredProject, projectTree, projectVsServices, addItemDialogService, vsShellService));
        }
        public async Task ShowProjectDesignerAsync_WhenOpenedInInternalEditor_ShowsWindow()
        {
            var vsProjectDesignerPageService = IVsProjectDesignerPageServiceFactory.ImplementIsProjectDesignerSupported(() => true);

            var editorGuid = Guid.NewGuid();

            var hierarchy = IVsHierarchyFactory.Create();
            hierarchy.ImplementGetGuid(VsHierarchyPropID.ProjectDesignerEditor, result: editorGuid);
            var project = (IVsProject4)hierarchy;

            int callCount = 0;
            var frame = IVsWindowFrameFactory.ImplementShow(() => { callCount++; return 0; });
            project.ImplementOpenItemWithSpecific(editorGuid, VSConstants.LOGVIEWID_Primary, frame);

            var projectVsServices = IUnconfiguredProjectVsServicesFactory.Implement(() => hierarchy, () => project);

            var designerService = CreateInstance(projectVsServices, vsProjectDesignerPageService);

            await designerService.ShowProjectDesignerAsync();

            Assert.Equal(1, callCount);
        }
        private VsProjectSpecialFilesManager CreateInstance(IVsProjectSpecialFiles specialFiles)
        {
            IUnconfiguredProjectVsServices projectVsServices = IUnconfiguredProjectVsServicesFactory.Implement(hierarchyCreator: () => (IVsHierarchy)specialFiles);

            return(new VsProjectSpecialFilesManager(projectVsServices));
        }