private static ConfiguredProject CreateConfiguredProject(string[] capabilities, Dictionary <string, string?> propertyNamesAndValues)
 {
     return(ConfiguredProjectFactory.Create(
                IProjectCapabilitiesScopeFactory.Create(capabilities),
                services: ConfiguredProjectServicesFactory.Create(
                    projectPropertiesProvider: IProjectPropertiesProviderFactory.Create(
                        commonProps: IProjectPropertiesFactory.CreateWithPropertiesAndValues(
                            propertyNamesAndValues)))));
 }
示例#2
0
        public BuildUpToDateCheckTests(ITestOutputHelper output)
        {
            _output = output;

            // NOTE most of these mocks are only present to prevent NREs in Initialize

            // Enable "Info" log level, as we assert logged messages in tests
            var projectSystemOptions = new Mock <IProjectSystemOptions>();

            projectSystemOptions.Setup(o => o.GetFastUpToDateLoggingLevelAsync(It.IsAny <CancellationToken>()))
            .ReturnsAsync(LogLevel.Info);
            projectSystemOptions.Setup(o => o.GetIsFastUpToDateCheckEnabledAsync(It.IsAny <CancellationToken>()))
            .ReturnsAsync(() => _isFastUpToDateCheckEnabled);

            var projectCommonServices = IProjectCommonServicesFactory.CreateWithDefaultThreadingPolicy();
            var jointRuleSource       = new ProjectValueDataSource <IProjectSubscriptionUpdate>(projectCommonServices);
            var sourceItemsRuleSource = new ProjectValueDataSource <IProjectSubscriptionUpdate>(projectCommonServices);

            var projectSubscriptionService = new Mock <IProjectSubscriptionService>();

            projectSubscriptionService.SetupGet(o => o.JointRuleSource).Returns(jointRuleSource);
            projectSubscriptionService.SetupGet(o => o.SourceItemsRuleSource).Returns(sourceItemsRuleSource);

            var configuredProjectServices = ConfiguredProjectServicesFactory.Create(projectSubscriptionService: projectSubscriptionService.Object);

            var configuredProject = new Mock <ConfiguredProject>();

            configuredProject.SetupGet(c => c.ProjectVersion).Returns(() => _projectVersion);
            configuredProject.SetupGet(c => c.Services).Returns(configuredProjectServices);
            configuredProject.SetupGet(c => c.UnconfiguredProject).Returns(UnconfiguredProjectFactory.Create(filePath: _projectFullPath));

            var projectAsynchronousTasksService = new Mock <IProjectAsynchronousTasksService>();

            projectAsynchronousTasksService.SetupGet(s => s.UnloadCancellationToken).Returns(CancellationToken.None);
            projectAsynchronousTasksService.Setup(s => s.IsTaskQueueEmpty(ProjectCriticalOperation.Build)).Returns(() => _isTaskQueueEmpty);

            var lastWriteTimeUtc = new DateTime(1999, 1, 1, 0, 0, 0, DateTimeKind.Utc);

            _fileSystem = new IFileSystemMock();
            _fileSystem.AddFile(_msBuildProjectFullPath, lastWriteTimeUtc);
            _fileSystem.AddFile("Project1", lastWriteTimeUtc);
            _fileSystem.AddFile("Project2", lastWriteTimeUtc);
            _fileSystem.AddFolder(_msBuildProjectDirectory);
            _fileSystem.AddFolder(_outputPath);

            var threadingService = IProjectThreadingServiceFactory.Create();

            _buildUpToDateCheck = new BuildUpToDateCheck(
                projectSystemOptions.Object,
                configuredProject.Object,
                projectAsynchronousTasksService.Object,
                IProjectItemSchemaServiceFactory.Create(),
                ITelemetryServiceFactory.Create(telemetryParameters => _telemetryEvents.Add(telemetryParameters)),
                threadingService,
                _fileSystem);
        }
示例#3
0
        private static IVsHierarchy CreateIVSHierarchy(string targetFrameworkMoniker = ".NETCoreApp,Version=v3.0")
        {
            var projectProperties  = IProjectPropertiesFactory.CreateWithPropertyAndValue("TargetFrameworkMoniker", targetFrameworkMoniker);
            var propertiesProvider = IProjectPropertiesProviderFactory.Create(commonProps: projectProperties);
            var project            = ConfiguredProjectFactory.Create(services: ConfiguredProjectServicesFactory.Create(projectPropertiesProvider: propertiesProvider));
            var scope        = IProjectCapabilitiesScopeFactory.Create(new[] { ProjectCapability.DotNet, ProjectCapability.PackageReferences });
            var ivsHierarchy = IVsHierarchyFactory.ImplementAsUnconfiguredProject(UnconfiguredProjectFactory.Create(scope: scope, configuredProject: project));

            return(ivsHierarchy);
        }
        public async Task GetProperty_ReturnsEmptyString_WhenThereIsNoPropertyPagesCatalog()
        {
            var provider = new LaunchTargetPropertyPageValueProvider(
                project: UnconfiguredProjectFactory.Create(
                    configuredProject: ConfiguredProjectFactory.Create(
                        services: ConfiguredProjectServicesFactory.Create(
                            propertyPagesCatalogProvider: null))),
                launchSettingsProvider: SetupLaunchSettingsProvider(activeProfileName: "Alpha", activeProfileLaunchTarget: "AlphaCommand"),
                projectThreadingService: IProjectThreadingServiceFactory.Create());

            var actualValue = await provider.OnGetEvaluatedPropertyValueAsync(string.Empty, string.Empty, Mock.Of <IProjectProperties>());

            Assert.Equal(expected: string.Empty, actual: actualValue);
        }
        public async Task GetProperty_DoesNotFail_WhenAPageHasNoTemplate()
        {
            var catalogProvider = GetCatalogAndProviderDataWithMissingTemplateName();

            var provider = new LaunchTargetPropertyPageValueProvider(
                project: UnconfiguredProjectFactory.Create(
                    configuredProject: ConfiguredProjectFactory.Create(
                        services: ConfiguredProjectServicesFactory.Create(
                            propertyPagesCatalogProvider: catalogProvider))),
                launchSettingsProvider: SetupLaunchSettingsProvider(activeProfileName: "Alpha", activeProfileLaunchTarget: "BetaCommand"),
                projectThreadingService: IProjectThreadingServiceFactory.Create());

            var actualValue = await provider.OnGetEvaluatedPropertyValueAsync(string.Empty, string.Empty, Mock.Of <IProjectProperties>());

            Assert.Equal(expected: string.Empty, actual: actualValue);
        }
        public async Task GetListValuesAsync_ReturnsPageNamesAndDisplayNames()
        {
            var catalogProvider = GetCatalogProviderAndData();

            var provider = new LaunchTargetPropertyPageEnumProvider(
                ConfiguredProjectFactory.Create(
                    services: ConfiguredProjectServicesFactory.Create(
                        propertyPagesCatalogProvider: catalogProvider)));
            var generator = await provider.GetProviderAsync(options : null);

            var values = await generator.GetListedValuesAsync();

            Assert.Collection(values, new Action <IEnumValue>[]
            {
                ev => { Assert.Equal(expected: "BetaCommandPageId", actual: ev.Name); Assert.Equal(expected: "Beta", actual: ev.DisplayName); },
                ev => { Assert.Equal(expected: "GammaCommandPageId", actual: ev.Name); Assert.Equal(expected: "Gamma", actual: ev.DisplayName); }
            });
        }
        private static DotNetCoreProjectCompatibilityDetector CreateCompatibilityDetector(out IDialogServices dialogServices,
                                                                                          string?versionDataString      = null,
                                                                                          Version?vsVersion             = null,
                                                                                          bool isSolutionOpen           = false,
                                                                                          bool hasNewProjects           = false,
                                                                                          bool usingPreviewSDK          = false,
                                                                                          bool isCapabilityMatch        = true,
                                                                                          string targetFrameworkMoniker = ".NETCoreApp,Version=v3.0")
        {
            dialogServices = IDialogServicesFactory.Create();
            var additionalReference = dialogServices;
            var projectProperties   = IProjectPropertiesFactory.CreateWithPropertyAndValue("TargetFrameworkMoniker", targetFrameworkMoniker);
            var propertiesProvider  = IProjectPropertiesProviderFactory.Create(commonProps: projectProperties);
            var project             = ConfiguredProjectFactory.Create(services: ConfiguredProjectServicesFactory.Create(projectPropertiesProvider: propertiesProvider));
            var scope                  = hasNewProjects ? IProjectCapabilitiesScopeFactory.Create(new[] { ProjectCapability.DotNet, ProjectCapability.PackageReferences }) : null;
            var projectAccessor        = new Lazy <IProjectServiceAccessor>(() => IProjectServiceAccessorFactory.Create(scope, project));
            var lazyDialogServices     = new Lazy <IDialogServices>(() => additionalReference);
            var threadHandling         = new Lazy <IProjectThreadingService>(() => IProjectThreadingServiceFactory.Create(verifyOnUIThread: false));
            var vsShellUtilitiesHelper = new Lazy <IVsShellUtilitiesHelper>(() => IVsShellUtilitiesHelperFactory.Create(string.Empty, vsVersion ?? new Version("16.1")));
            var fileSystem             = new Lazy <IFileSystem>(() => IFileSystemFactory.Create(existsFunc: x => true, readAllTextFunc: x => versionDataString ?? defaultVersionDataString));
            var httpClient             = new Lazy <IHttpClient>(() => IHttpClientFactory.Create(versionDataString ?? defaultVersionDataString));
            var vsUIShellService       = IVsServiceFactory.Create <SVsUIShell, IVsUIShell>(Mock.Of <IVsUIShell>());
            var settingsManagerService = IVsServiceFactory.Create <SVsSettingsPersistenceManager, ISettingsManager>(Mock.Of <ISettingsManager>());
            var vsSolutionService      = IVsServiceFactory.Create <SVsSolution, IVsSolution>(IVsSolutionFactory.CreateWithAdviseUnadviseSolutionEvents(1, isFullyLoaded: isSolutionOpen));
            var vsAppIdService         = IVsServiceFactory.Create <SVsAppId, IVsAppId>(Mock.Of <IVsAppId>());
            var vsShellService         = IVsServiceFactory.Create <SVsShell, IVsShell>(Mock.Of <IVsShell>());

            var compatibilityDetector = new TestDotNetCoreProjectCompatibilityDetector(projectAccessor,
                                                                                       lazyDialogServices,
                                                                                       threadHandling,
                                                                                       vsShellUtilitiesHelper,
                                                                                       fileSystem,
                                                                                       httpClient,
                                                                                       vsUIShellService,
                                                                                       settingsManagerService,
                                                                                       vsSolutionService,
                                                                                       vsAppIdService,
                                                                                       vsShellService,
                                                                                       hasNewProjects,
                                                                                       usingPreviewSDK,
                                                                                       isCapabilityMatch);

            return(compatibilityDetector);
        }
        public async Task SetProperty_DoesNothing_WhenThereIsNoPropertyPagesCatalog()
        {
            bool launchSettingsUpdated = false;

            var provider = new LaunchTargetPropertyPageValueProvider(
                project: UnconfiguredProjectFactory.Create(
                    configuredProject: ConfiguredProjectFactory.Create(
                        services: ConfiguredProjectServicesFactory.Create(
                            propertyPagesCatalogProvider: null))),
                launchSettingsProvider: SetupLaunchSettingsProvider(
                    activeProfileName: "Alpha",
                    activeProfileLaunchTarget: "AlphaCommand",
                    updateLaunchSettingsCallback: ls => launchSettingsUpdated = true),
                projectThreadingService: IProjectThreadingServiceFactory.Create());

            var actualValue = await provider.OnSetPropertyValueAsync(string.Empty, "BetaPage", Mock.Of <IProjectProperties>());

            Assert.Null(actualValue);
            Assert.False(launchSettingsUpdated);
        }
        public async Task  SetProperty_UpdatesActiveProfileCommand_WhenAPageWithAMatchingNameIsFound()
        {
            string newLaunchTarget = string.Empty;

            var catalogProvider = GetCatalogProviderAndData();

            var provider = new LaunchTargetPropertyPageValueProvider(
                project: UnconfiguredProjectFactory.Create(
                    configuredProject: ConfiguredProjectFactory.Create(
                        services: ConfiguredProjectServicesFactory.Create(
                            propertyPagesCatalogProvider: catalogProvider))),
                launchSettingsProvider: SetupLaunchSettingsProvider(
                    activeProfileName: "Alpha",
                    activeProfileLaunchTarget: "AlphaCommand",
                    updateLaunchSettingsCallback: ls => newLaunchTarget = ls.ActiveProfile !.CommandName),
                projectThreadingService: IProjectThreadingServiceFactory.Create());

            var actualValue = await provider.OnSetPropertyValueAsync(string.Empty, "GammaPage", Mock.Of <IProjectProperties>());

            Assert.Null(actualValue);
            Assert.Equal(expected: "GammaCommand", actual: newLaunchTarget);
        }