private InterceptedProjectPropertiesProviderBase CreateInstance(FrameworkName configuredTargetFramework) { var data = new PropertyPageData() { Category = ConfigurationGeneral.SchemaName, PropertyName = ConfigurationGeneral.TargetFrameworkMonikerProperty, Value = configuredTargetFramework.FullName }; var project = UnconfiguredProjectFactory.Create(); var properties = ProjectPropertiesFactory.Create(project, data); var instanceProvider = IProjectInstancePropertiesProviderFactory.Create(); var delegatePropertiesMock = IProjectPropertiesFactory .MockWithProperty(TargetFrameworkPropertyName); var delegateProperties = delegatePropertiesMock.Object; var delegateProvider = IProjectPropertiesProviderFactory.Create(delegateProperties); var targetFrameworkProvider = new TargetFrameworkValueProvider(properties); var providerMetadata = IInterceptingPropertyValueProviderMetadataFactory.Create(TargetFrameworkPropertyName); var lazyArray = new[] { new Lazy <IInterceptingPropertyValueProvider, IInterceptingPropertyValueProviderMetadata>( () => targetFrameworkProvider, providerMetadata) }; return(new ProjectFileInterceptedProjectPropertiesProvider(delegateProvider, instanceProvider, project, lazyArray)); }
private ConsoleDebugTargetsProvider GetDebugTargetsProvider(string outputType = "exe", Dictionary <string, string> properties = null) { _mockFS.WriteAllText(@"c:\test\Project\someapp.exe", ""); _mockFS.CreateDirectory(@"c:\test\Project"); _mockFS.CreateDirectory(@"c:\test\Project\bin\"); _mockFS.WriteAllText(@"c:\program files\dotnet\dotnet.exe", ""); _mockEnvironment.Setup(s => s.GetEnvironmentVariable("Path")).Returns(() => _Path); var project = UnconfiguredProjectFactory.Create(filePath: _ProjectFile); var outputTypeEnum = new PageEnumValue(new EnumValue() { Name = outputType }); var data = new PropertyPageData() { Category = ConfigurationGeneral.SchemaName, PropertyName = ConfigurationGeneral.OutputTypeProperty, Value = outputTypeEnum }; var projectProperties = ProjectPropertiesFactory.Create(project, data); if (properties == null) { properties = new Dictionary <string, string>() { { "RunCommand", @"dotnet" }, { "RunArguments", "exec " + "\"" + @"c:\test\project\bin\project.dll" + "\"" }, { "RunWorkingDirectory", @"bin\" }, { "TargetFrameworkIdentifier", @".NetCoreApp" }, { "OutDir", @"c:\test\project\bin\" } }; } var delegatePropertiesMock = IProjectPropertiesFactory .MockWithPropertiesAndValues(properties); var delegateProvider = IProjectPropertiesProviderFactory.Create(null, delegatePropertiesMock.Object); var configuredProjectServices = Mock.Of <IConfiguredProjectServices>(o => o.ProjectPropertiesProvider == delegateProvider); var configuredProject = Mock.Of <ConfiguredProject>(o => o.UnconfiguredProject == project && o.Services == configuredProjectServices); _mockTokenReplace.Setup(s => s.ReplaceTokensInProfileAsync(It.IsAny <ILaunchProfile>())).Returns <ILaunchProfile>(p => Task.FromResult(p)); var activeDebugFramework = Mock.Of <IActiveDebugFrameworkServices>(o => o.GetConfiguredProjectForActiveFrameworkAsync() == Task.FromResult(configuredProject)); var debugProvider = new ConsoleDebugTargetsProvider( configuredProject, _mockTokenReplace.Object, _mockFS, _mockEnvironment.Object, activeDebugFramework, projectProperties); return(debugProvider); }
ConsoleDebugTargetsProvider GetDebugTargetsProvider(string outputType = "exe", Dictionary <string, string> properties = null) { _mockFS.WriteAllText(@"c:\test\Project\someapp.exe", ""); _mockFS.CreateDirectory(@"c:\test\Project"); _mockFS.WriteAllText(@"c:\program files\dotnet\dotnet.exe", ""); LaunchProfile activeProfile = new LaunchProfile() { Name = "MyApplication", CommandLineArgs = "--someArgs", ExecutablePath = @"c:\test\Project\someapp.exe" }; _mockEnvironment.Setup(s => s.GetEnvironmentVariable("Path")).Returns(() => _Path); var project = IUnconfiguredProjectFactory.Create(null, null, _ProjectFile); var outputTypeEnum = new PageEnumValue(new EnumValue() { Name = outputType }); var data = new PropertyPageData() { Category = ConfigurationGeneral.SchemaName, PropertyName = ConfigurationGeneral.OutputTypeProperty, Value = outputTypeEnum }; var projectProperties = ProjectPropertiesFactory.Create(project, data); if (properties == null) { properties = new Dictionary <string, string>() { { "TargetPath", @"c:\test\project\bin\project.dll" }, { "TargetFrameworkIdentifier", @".NetCoreApp" } }; } var delegatePropertiesMock = IProjectPropertiesFactory .MockWithPropertiesAndValues(properties); var delegateProvider = IProjectPropertiesProviderFactory.Create(null, delegatePropertiesMock.Object); IConfiguredProjectServices configuredProjectServices = Mock.Of <IConfiguredProjectServices>(o => o.ProjectPropertiesProvider == delegateProvider); ConfiguredProject configuredProject = Mock.Of <ConfiguredProject>(o => o.UnconfiguredProject == project && o.Services == configuredProjectServices); _mockTokenReplace.Setup(s => s.ReplaceTokensInProfileAsync(It.IsAny <ILaunchProfile>())).Returns <ILaunchProfile>(p => Task.FromResult(p)); var debugProvider = new ConsoleDebugTargetsProvider( configuredProject, _mockTokenReplace.Object, _mockFS, _mockEnvironment.Object, projectProperties); return(debugProvider); }
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))))); }
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 void Constructor_NullUnconfiguredProject_ThrowsArgumentNullException() { var delegatePropertiesMock = IProjectPropertiesFactory .MockWithPropertyAndValue("ProjectGuid", "7259e9ef-87d1-45a5-95c6-3a8432d23776"); var delegateProperties = delegatePropertiesMock.Object; var delegateProvider = IProjectPropertiesProviderFactory.Create(delegateProperties); Assert.Throws <ArgumentNullException>("unconfiguredProject", () => { new ImplicitProjectPropertiesProvider(delegateProvider, IProjectInstancePropertiesProviderFactory.Create(), null); }); }
public void GetBuildMacroValue(string macroName, string expectedValue, int expectedRetVal) { var projectProperties = IProjectPropertiesFactory.CreateWithPropertyAndValue("MyBuildMacro", "MyBuildMacroValue"); var propertiesProvider = IProjectPropertiesProviderFactory.Create(commonProps: projectProperties); var configuredProjectServices = Mock.Of <ConfiguredProjectServices>(o => o.ProjectPropertiesProvider == propertiesProvider); var configuredProject = ConfiguredProjectFactory.Create(services: configuredProjectServices); var buildMacroInfo = CreateInstance(configuredProject); int retVal = buildMacroInfo.GetBuildMacroValue(macroName, out string?macroValue); Assert.Equal(expectedRetVal, retVal); Assert.Equal(expectedValue, macroValue); }
public void BuildMacroInfoTests_GetBuildMacroValue(string macroName, string expectedValue, int expectedRetVal) { var projectProperties = IProjectPropertiesFactory.CreateWithPropertyAndValue("MyBuildMacro", "MyBuildMacroValue"); var propertiesProvider = IProjectPropertiesProviderFactory.Create(commonProps: projectProperties); var configuredProjectServices = Mock.Of <IConfiguredProjectServices>(o => o.ProjectPropertiesProvider == propertiesProvider); var configuredProject = ConfiguredProjectFactory.Create(services: configuredProjectServices); ActiveConfiguredProject <ConfiguredProject> activeConfiguredProject = ActiveConfiguredProjectFactory.ImplementValue(() => configuredProject); var threadingService = IProjectThreadingServiceFactory.Create(); var buildMacroInfo = new BuildMacroInfo(activeConfiguredProject, threadingService); int retVal = buildMacroInfo.GetBuildMacroValue(macroName, out string macroValue); Assert.Equal(expectedRetVal, retVal); Assert.Equal(expectedValue, macroValue); }
private ConsoleDebugTargetsProvider GetDebugTargetsProvider(string outputType = "exe", Dictionary <string, string> properties = null, IVsDebugger10 debugger = null) { _mockFS.WriteAllText(@"c:\test\Project\someapp.exe", ""); _mockFS.CreateDirectory(@"c:\test\Project"); _mockFS.CreateDirectory(@"c:\test\Project\bin\"); _mockFS.WriteAllText(@"c:\program files\dotnet\dotnet.exe", ""); var project = UnconfiguredProjectFactory.Create(filePath: _ProjectFile); var outputTypeEnum = new PageEnumValue(new EnumValue() { Name = outputType }); var data = new PropertyPageData() { Category = ConfigurationGeneral.SchemaName, PropertyName = ConfigurationGeneral.OutputTypeProperty, Value = outputTypeEnum }; var projectProperties = ProjectPropertiesFactory.Create(project, data); if (properties == null) { properties = new Dictionary <string, string>() { { "RunCommand", @"dotnet" }, { "RunArguments", "exec " + "\"" + @"c:\test\project\bin\project.dll" + "\"" }, { "RunWorkingDirectory", @"bin\" }, { "TargetFrameworkIdentifier", @".NetCoreApp" }, { "OutDir", @"c:\test\project\bin\" } }; } var delegatePropertiesMock = IProjectPropertiesFactory .MockWithPropertiesAndValues(properties); var delegateProvider = IProjectPropertiesProviderFactory.Create(null, delegatePropertiesMock.Object); var configuredProjectServices = Mock.Of <ConfiguredProjectServices>(o => o.ProjectPropertiesProvider == delegateProvider); var configuredProject = Mock.Of <ConfiguredProject>(o => o.UnconfiguredProject == project && o.Services == configuredProjectServices); var environment = IEnvironmentHelperFactory.ImplementGetEnvironmentVariable(_Path); return(CreateInstance(project: project, configuredProject: configuredProject, fileSystem: _mockFS, properties: projectProperties, environment: environment, debugger: debugger)); }
public void Constructor_NullDelegatedInstanceProvider_ThrowsArgumentNullException() { var delegatePropertiesMock = IProjectPropertiesFactory .MockWithPropertyAndValue("ProjectGuid", "7259e9ef-87d1-45a5-95c6-3a8432d23776"); var delegateProperties = delegatePropertiesMock.Object; var delegateProvider = IProjectPropertiesProviderFactory.Create(delegateProperties); var unconfiguredProject = IUnconfiguredProjectFactory.Create(); Assert.Throws <ArgumentNullException>("instanceProvider", () => { new ImplicitProjectPropertiesProvider(delegateProvider, null, new ImplicitProjectPropertiesStore <string, string>(unconfiguredProject), unconfiguredProject); }); }
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 void Provider_ReturnsImplicitPropertyProvider() { var unconfiguredProject = IUnconfiguredProjectFactory.Create(); var instanceProvider = IProjectInstancePropertiesProviderFactory.ImplementsGetItemTypeProperties(); var delegatePropertiesMock = IProjectPropertiesFactory .MockWithPropertyAndValue("Something", "NotImportant"); var delegateProperties = delegatePropertiesMock.Object; var delegateProvider = IProjectPropertiesProviderFactory.Create(delegateProperties); var propertyStore = new ImplicitProjectPropertiesStore <string, string>(unconfiguredProject); var provider = new ImplicitProjectPropertiesProvider(delegateProvider, instanceProvider, propertyStore, unconfiguredProject); var properties = provider.GetItemTypeProperties(null, ""); properties.SetPropertyValueAsync("ProjectGuid", "7259e9ef-87d1-45a5-95c6-3a8432d23776"); Assert.Equal("7259e9ef-87d1-45a5-95c6-3a8432d23776", properties.GetEvaluatedPropertyValueAsync("ProjectGuid").Result); }
public async Task VerifySetKeyFilePropertyAsync() { string projectFolder = @"C:\project\root"; string projectFullPath = $@"{projectFolder}\project.testproj"; string keyFileName = "KeyFile.snk"; string keyFileFullPath = $@"{projectFolder}\{keyFileName}"; var delegatePropertiesMock = IProjectPropertiesFactory .MockWithPropertiesAndValues(new Dictionary <string, string>() { { AssemblyOriginatorKeyFilePropertyName, keyFileFullPath } }); var delegateProperties = delegatePropertiesMock.Object; var delegateProvider = IProjectPropertiesProviderFactory.Create(delegateProperties); // Verify get key file value without intercepted provider. var properties = delegateProvider.GetProperties("path/to/project.testproj", null, null); var propertyValue = await properties.GetEvaluatedPropertyValueAsync(AssemblyOriginatorKeyFilePropertyName); Assert.Equal(keyFileFullPath, propertyValue); // Verify relative path key file value from intercepted key file provider. var unconfiguredProject = UnconfiguredProjectFactory.Create(filePath: projectFullPath); var instanceProvider = IProjectInstancePropertiesProviderFactory.Create(); var keyFileProvider = new AssemblyOriginatorKeyFileValueProvider(unconfiguredProject); var providerMetadata = IInterceptingPropertyValueProviderMetadataFactory.Create(AssemblyOriginatorKeyFilePropertyName); var lazyArray = new[] { new Lazy <IInterceptingPropertyValueProvider, IInterceptingPropertyValueProviderMetadata>( () => keyFileProvider, providerMetadata) }; var interceptedProvider = new ProjectFileInterceptedProjectPropertiesProvider(delegateProvider, instanceProvider, unconfiguredProject, lazyArray); var propertyNames = await properties.GetPropertyNamesAsync(); Assert.Single(propertyNames); Assert.Equal(AssemblyOriginatorKeyFilePropertyName, propertyNames.First()); properties = interceptedProvider.GetProperties("path/to/project.testproj", null, null); string newKeyFileName = "KeyFile2.snk"; string newKeyFileFullPath = $@"{projectFolder}\{newKeyFileName}"; await properties.SetPropertyValueAsync(AssemblyOriginatorKeyFilePropertyName, newKeyFileFullPath); propertyValue = await properties.GetEvaluatedPropertyValueAsync(AssemblyOriginatorKeyFilePropertyName); Assert.Equal(newKeyFileName, propertyValue); }
public void Provider_IgnoresPropertyIfAbsent() { var unconfiguredProject = IUnconfiguredProjectFactory.Create(); var instanceProvider = IProjectInstancePropertiesProviderFactory.Create(); var delegatePropertiesMock = IProjectPropertiesFactory .MockWithProperty("SomeOtherProperty"); var delegateProperties = delegatePropertiesMock.Object; var delegateProvider = IProjectPropertiesProviderFactory.Create(delegateProperties); var provider = new ImplicitProjectPropertiesProvider(delegateProvider, instanceProvider, unconfiguredProject); var properties = provider.GetProperties("path/to/project.testproj", null, null); // does not call the set property on the delegated property above properties.SetPropertyValueAsync("ProjectGuid", "7259e9ef-87d1-45a5-95c6-3a8432d23776"); // verify all the setups delegatePropertiesMock.VerifyAll(); }
public void Provider_SetsPropertyIfPresent() { var unconfiguredProject = IUnconfiguredProjectFactory.Create(); var instanceProvider = IProjectInstancePropertiesProviderFactory.Create(); var delegatePropertiesMock = IProjectPropertiesFactory .MockWithPropertyAndValue("ProjectGuid", "7259e9ef-87d1-45a5-95c6-3a8432d23776"); var delegateProperties = delegatePropertiesMock.Object; var delegateProvider = IProjectPropertiesProviderFactory.Create(delegateProperties); var provider = new ImplicitProjectPropertiesProvider(delegateProvider, instanceProvider, unconfiguredProject); var properties = provider.GetProperties("path/to/project.testproj", null, null); // calls delegate above with matching values properties.SetPropertyValueAsync("ProjectGuid", "7259e9ef-87d1-45a5-95c6-3a8432d23776"); // verify all the setups delegatePropertiesMock.Verify(p => p.SetPropertyValueAsync("ProjectGuid", "7259e9ef-87d1-45a5-95c6-3a8432d23776", null)); }
public async Task VerifyInterceptedViaSnapshotInstanceCommonPropertiesProviderAsync() { var delegatePropertiesMock = IProjectPropertiesFactory.MockWithPropertiesAndValues( new Dictionary <string, string?> { { MockPropertyName, "DummyValue" } }); var delegateProperties = delegatePropertiesMock.Object; var delegateInstanceProvider = IProjectInstancePropertiesProviderFactory.ImplementsGetCommonProperties(delegateProperties); bool getEvaluatedInvoked = false; bool getUnevaluatedInvoked = false; bool setValueInvoked = false; var mockPropertyProvider = IInterceptingPropertyValueProviderFactory.Create(MockPropertyName, onGetEvaluatedPropertyValue: (v, p) => { getEvaluatedInvoked = true; return(v); }, onGetUnevaluatedPropertyValue: (v, p) => { getUnevaluatedInvoked = true; return(v); }, onSetPropertyValue: (v, p, d) => { setValueInvoked = true; return(v); }); var unconfiguredProject = UnconfiguredProjectFactory.Create(); var provider = IProjectPropertiesProviderFactory.Create(); var interceptedProvider = new ProjectFileInterceptedViaSnapshotProjectPropertiesProvider(provider, delegateInstanceProvider, unconfiguredProject, new[] { mockPropertyProvider }); var properties = interceptedProvider.GetCommonProperties(projectInstance: null); // Verify interception for GetEvaluatedPropertyValueAsync. string?propertyValue = await properties.GetEvaluatedPropertyValueAsync(MockPropertyName); Assert.True(getEvaluatedInvoked); // Verify interception for GetUnevaluatedPropertyValueAsync. propertyValue = await properties.GetUnevaluatedPropertyValueAsync(MockPropertyName); Assert.True(getUnevaluatedInvoked); // Verify interception for SetPropertyValueAsync. await properties.SetPropertyValueAsync(MockPropertyName, "NewValue", null); Assert.True(setValueInvoked); }
public TestProjectFileOrAssemblyInfoPropertiesProvider( Workspace workspace, UnconfiguredProject unconfiguredProject, Lazy <IInterceptingPropertyValueProvider, IInterceptingPropertyValueProviderMetadata> interceptingProvider = null, IProjectThreadingService threadingService = null, IProjectProperties defaultProperties = null, IProjectInstancePropertiesProvider instanceProvider = null, Func <ProjectId> getActiveProjectId = null) : base(delegatedProvider : IProjectPropertiesProviderFactory.Create(defaultProperties ?? IProjectPropertiesFactory.MockWithProperty("").Object), instanceProvider : instanceProvider ?? IProjectInstancePropertiesProviderFactory.Create(), interceptingValueProviders : interceptingProvider == null ? new[] { new Lazy <IInterceptingPropertyValueProvider, IInterceptingPropertyValueProviderMetadata>( () => IInterceptingPropertyValueProviderFactory.Create(), IInterceptingPropertyValueProviderMetadataFactory.Create("")) } : new[] { interceptingProvider }, unconfiguredProject : unconfiguredProject, getActiveProjectId : getActiveProjectId ?? (() => workspace.CurrentSolution.ProjectIds.SingleOrDefault()), workspace : workspace, threadingService : threadingService ?? IProjectThreadingServiceFactory.Create()) { Requires.NotNull(workspace, nameof(workspace)); Requires.NotNull(unconfiguredProject, nameof(unconfiguredProject)); }