public void GetDefaultToolsVersionFromRegistry_DefaultValueNotSet() { ToolsetReader reader = new ToolsetRegistryReader(new MockRegistryKey(testRegistryPath)); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); string defaultToolsVersion = reader.ReadToolsets(values, new BuildPropertyGroup(), new BuildPropertyGroup(), false); Assertion.AssertEquals(null, defaultToolsVersion); }
public void ReadRegistry_DeletedKey() { DeleteTestRegistryKey(); ToolsetReader reader = new ToolsetRegistryReader(new MockRegistryKey(testRegistryPath)); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); string defaultToolsVersion = reader.ReadToolsets(values, new BuildPropertyGroup(), new BuildPropertyGroup(), false); Assertion.AssertEquals(0, values.Count); }
public void ReadRegistry_DeletedKey() { DeleteTestRegistryKey(); ToolsetReader reader = new ToolsetRegistryReader(new MockRegistryKey(testRegistryPath)); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); string defaultToolsVersion = reader.ReadToolsets(values, new BuildPropertyGroup(), new BuildPropertyGroup(), false); Assertion.AssertEquals(0, values.Count); }
public void DefaultValueInRegistryDoesNotExist() { ToolsetReader reader = new ToolsetRegistryReader(new MockRegistryKey(testRegistryPath, "3.5" /* fail to find subkey 3.5 */)); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); // Should not throw string defaultToolsVersion = reader.ReadToolsets(values, new BuildPropertyGroup(), new BuildPropertyGroup(), false); Assertion.AssertEquals(null, defaultToolsVersion); }
public void ReadRegistry_NoSubkeysOnlyValues() { toolsVersionsRegistryKey.SetValue("Name1", "Value1"); toolsVersionsRegistryKey.SetValue("Name2", "Value2"); ToolsetReader reader = new ToolsetRegistryReader(new MockRegistryKey(testRegistryPath)); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); string defaultToolsVersion = reader.ReadToolsets(values, new BuildPropertyGroup(), new BuildPropertyGroup(), false); Assertion.AssertEquals(0, values.Count); Assertion.AssertEquals(null, defaultToolsVersion); }
public void GetDefaultToolsVersionFromRegistry_Basic() { currentVersionRegistryKey.SetValue("DefaultToolsVersion", "tv1"); RegistryKey key1 = toolsVersionsRegistryKey.CreateSubKey("tv1"); // Need matching tools version key1.SetValue("msbuildtoolspath", "c:\\xxx"); ToolsetReader reader = new ToolsetRegistryReader(new MockRegistryKey(testRegistryPath)); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); string defaultToolsVersion = reader.ReadToolsets(values, new BuildPropertyGroup(), new BuildPropertyGroup(), false); Assertion.AssertEquals("tv1", defaultToolsVersion); }
public void ReadRegistry_NonStringData() { RegistryKey key1 = toolsVersionsRegistryKey.CreateSubKey("tv1"); key1.SetValue("msbuildtoolspath", "c:\\xxx"); key1.SetValue("name1", "value1"); RegistryKey key2 = toolsVersionsRegistryKey.CreateSubKey("tv2"); key2.SetValue("msbuildtoolspath", "c:\\xxx"); key2.SetValue("name2", new String[] { "value2a", "value2b" }, RegistryValueKind.MultiString); ToolsetReader reader = new ToolsetRegistryReader(new MockRegistryKey(testRegistryPath)); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); string defaultToolsVersion = reader.ReadToolsets(values, new BuildPropertyGroup(), new BuildPropertyGroup(), false); }
public void ReadRegistry_OnlyOneSubkey() { RegistryKey key1 = toolsVersionsRegistryKey.CreateSubKey("tv1"); key1.SetValue("msbuildtoolspath", "c:\\xxx"); ToolsetReader reader = new ToolsetRegistryReader(new MockRegistryKey(testRegistryPath)); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); string defaultToolsVersion = reader.ReadToolsets(values, new BuildPropertyGroup(), new BuildPropertyGroup(), false); Assertion.AssertEquals(null, defaultToolsVersion); Assertion.AssertEquals(1, values.Count); Assertion.AssertEquals(0, values["tv1"].BuildProperties.Count); Assertion.Assert(0 == String.Compare("c:\\xxx", values["tv1"].ToolsPath, StringComparison.OrdinalIgnoreCase)); }
public void DefaultValuesInRegistryCreatedBySetup() { ToolsetReader reader = new ToolsetRegistryReader(); //we don't use the test registry key because we want to verify the install ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); string defaultToolsVersion = reader.ReadToolsets(values, new BuildPropertyGroup(), new BuildPropertyGroup(), false); // Check the values in the data Assertion.Assert("Tools version 4.0 should be defined by default", values.Contains("4.0")); Assertion.AssertEquals("Default tools version should be 2.0", "2.0", defaultToolsVersion); if (FrameworkLocationHelper.PathToDotNetFrameworkV35 != null) { Assertion.Assert("Tools version 2.0 should be defined by default if .NET FX 3.5 exists on the machine.", values.Contains("2.0")); Assertion.Assert("Tools version 3.5 should be defined by default if .NET FX 3.5 exists on the machine.", values.Contains("3.5")); } }
public void DefaultValuesInRegistryCreatedBySetup() { ToolsetReader reader = new ToolsetRegistryReader(); //we don't use the test registry key because we want to verify the install ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); string defaultToolsVersion = reader.ReadToolsets(values, new BuildPropertyGroup(), new BuildPropertyGroup(), false); // Check the values in the data Assertion.Assert("Tools version 4.0 should be defined by default", values.Contains("4.0")); Assertion.AssertEquals("Default tools version should be 2.0", "2.0", defaultToolsVersion); if (FrameworkLocationHelper.PathToDotNetFrameworkV35 != null) { Assertion.Assert("Tools version 2.0 should be defined by default if .NET FX 3.5 exists on the machine.", values.Contains("2.0")); Assertion.Assert("Tools version 3.5 should be defined by default if .NET FX 3.5 exists on the machine.", values.Contains("3.5")); } }
public void GetToolsetDataFromConfiguration_SectionNotRegisteredInConfigFile() { ToolsetConfigurationReaderTestHelper.WriteConfigFile(@" <configuration> <configSections> </configSections> <msbuildToolsets> <toolset toolsVersion=""2.0""> <property name=""MSBuildBinPath"" value=""D:\windows\Microsoft.NET\Framework\v2.0.x86ret\""/> </toolset> </msbuildToolsets> </configuration>"); ToolsetReader reader = new ToolsetConfigurationReader(new ReadApplicationConfiguration( ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); string defaultToolsVersion = reader.ReadToolsets(values, new BuildPropertyGroup(), new BuildPropertyGroup(), true); Assertion.AssertEquals(null, defaultToolsVersion); Assertion.AssertEquals(0, values.Count); }
public void GetToolsetDataFromConfiguration_ConfigurationErrorsExceptionThrown() { ToolsetConfigurationReaderTestHelper.WriteConfigFile(@"", new ConfigurationErrorsException()); ToolsetReader reader = new ToolsetConfigurationReader(new ReadApplicationConfiguration( ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); // this should throw ... reader.ReadToolsets(values, new BuildPropertyGroup(), new BuildPropertyGroup(), true); }
public void GetToolsetDataFromConfiguration_DefaultToolsetUndefined() { ToolsetConfigurationReaderTestHelper.WriteConfigFile(@" <configuration> <configSections> <section name=""msbuildToolsets"" type=""Microsoft.Build.BuildEngine.ToolsetConfigurationSection, Microsoft.Build.Engine"" /> </configSections> <msbuildToolsets default=""nonexistent""> <toolset toolsVersion=""2.0""> <property name=""MSBuildBinPath"" value=""D:\windows\Microsoft.NET\Framework\v2.0.x86ret\""/> </toolset> </msbuildToolsets> </configuration>"); ToolsetReader reader = new ToolsetConfigurationReader(new ReadApplicationConfiguration( ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); // Does not throw reader.ReadToolsets(values, new BuildPropertyGroup(), new BuildPropertyGroup(), true); }
public void GlobalPropertiesInToolsetsAreExpandedButAreNotOverwritten() { ToolsetConfigurationReaderTestHelper.WriteConfigFile(@" <configuration> <configSections> <section name=""msbuildToolsets"" type=""Microsoft.Build.BuildEngine.ToolsetConfigurationSection, Microsoft.Build.Engine"" /> </configSections> <msbuildToolsets> <toolset toolsVersion=""3.5""> <property name=""MSBuildBinPath"" value=""D:\windows\Microsoft.NET\Framework\v2.0.x86ret\""/> <property name=""p1"" value=""$(gp1)""/> <property name=""gp1"" value=""v2""/> <property name=""p2"" value=""$(gp1)""/> </toolset> </msbuildToolsets> </configuration>"); Engine e = new Engine(ToolsetDefinitionLocations.None); ToolsetCollection values = new ToolsetCollection(e); BuildPropertyGroup globalProperties = e.GlobalProperties; globalProperties.SetProperty("gp1", "gv1"); BuildPropertyGroup initialProperties = new BuildPropertyGroup(); initialProperties.ImportProperties(e.EnvironmentProperties); initialProperties.ImportProperties(globalProperties); string defaultToolsVersion = ToolsetReader.ReadAllToolsets ( values, new ToolsetRegistryReader(new MockRegistryKey(testRegistryPath)), new ToolsetConfigurationReader(new ReadApplicationConfiguration(ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)), globalProperties, initialProperties, ToolsetDefinitionLocations.ConfigurationFile | ToolsetDefinitionLocations.Registry ); Assertion.AssertEquals("gv1", values["3.5"].BuildProperties["p1"].Value); Assertion.AssertEquals("gv1", values["3.5"].BuildProperties["p2"].Value); }
public void GetToolsetDataFromConfiguration_FileEmpty() { ToolsetConfigurationReaderTestHelper.WriteConfigFile(@""); ToolsetReader reader = new ToolsetConfigurationReader(new ReadApplicationConfiguration( ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); reader.ReadToolsets(values, new BuildPropertyGroup(), new BuildPropertyGroup(), true); }
public void InvalidPropertyNameInRegistry() { RegistryKey rk = toolsVersionsRegistryKey.CreateSubKey("2.0"); rk.SetValue("MSBuildBinPath", "someBinPath"); rk.SetValue("foo|bar", "x"); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); // Should throw ... string defaultToolsVersion = ToolsetReader.ReadAllToolsets ( values, new ToolsetRegistryReader(new MockRegistryKey(testRegistryPath)), new ToolsetConfigurationReader(new ReadApplicationConfiguration(ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)), new BuildPropertyGroup(), new BuildPropertyGroup(), ToolsetDefinitionLocations.Registry ); }
/// <summary> /// Tests that a specified registry property expression evaluates to specified value /// </summary> /// <param name="propertyExpression"></param> private void ConfigFileValidRegistryExpressionHelper(string propertyExpression, string expectedValue) { ToolsetConfigurationReaderTestHelper.WriteConfigFile(@" <configuration> <configSections> <section name=""msbuildToolsets"" type=""Microsoft.Build.BuildEngine.ToolsetConfigurationSection, Microsoft.Build.Engine"" /> </configSections> <msbuildToolsets default=""2.0""> <toolset toolsVersion=""2.0""> <property name=""MSBuildBinPath"" value=""xxxx""/> " + propertyExpression + @" </toolset> </msbuildToolsets> </configuration>"); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); ToolsetReader.ReadAllToolsets ( values, new ToolsetRegistryReader(new MockRegistryKey(testRegistryPath)), new ToolsetConfigurationReader(new ReadApplicationConfiguration(ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)), new BuildPropertyGroup(), new BuildPropertyGroup(), ToolsetDefinitionLocations.ConfigurationFile ); Assertion.AssertEquals(1, values.Count); Assertion.AssertEquals(expectedValue, values["2.0"].BuildProperties["p"].Value); }
public void GetToolsetDataFromConfiguration_Basic() { ToolsetConfigurationReaderTestHelper.WriteConfigFile(@" <configuration> <configSections> <section name=""msbuildToolsets"" type=""Microsoft.Build.BuildEngine.ToolsetConfigurationSection, Microsoft.Build.Engine"" /> </configSections> <msbuildToolsets default=""2.0""> <toolset toolsVersion=""2.0""> <property name=""MSBuildBinPath"" value=""D:\windows\Microsoft.NET\Framework\v2.0.x86ret\""/> </toolset> <toolset toolsVersion=""3.5""> <property name=""MSBuildBinPath"" value=""D:\windows\Microsoft.NET\Framework\v3.5.x86ret\""/> </toolset> </msbuildToolsets> </configuration>"); ToolsetReader reader = new ToolsetConfigurationReader(new ReadApplicationConfiguration( ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); string defaultToolsVersion = reader.ReadToolsets(values, new BuildPropertyGroup(), new BuildPropertyGroup(), true); Assertion.AssertEquals("2.0", defaultToolsVersion); Assertion.AssertEquals(2, values.Count); Assertion.AssertEquals(0, values["2.0"].BuildProperties.Count); Assertion.AssertEquals(@"D:\windows\Microsoft.NET\Framework\v2.0.x86ret", values["2.0"].ToolsPath); Assertion.AssertEquals(0, values["3.5"].BuildProperties.Count); Assertion.AssertEquals(@"D:\windows\Microsoft.NET\Framework\v3.5.x86ret", values["3.5"].ToolsPath); }
public void GetToolsetDataFromConfiguration_ToolsPathAndBinPathDiffer() { ToolsetConfigurationReaderTestHelper.WriteConfigFile(@" <configuration> <configSections> <section name=""msbuildToolsets"" type=""Microsoft.Build.BuildEngine.ToolsetConfigurationSection, Microsoft.Build.Engine"" /> </configSections> <msbuildToolsets default=""2.0""> <toolset toolsVersion=""2.0""> <property name=""MSBuildBinPath"" value=""D:\windows\Microsoft.NET\Framework\v2.0.x86ret\""/> <property name=""MSBuildToolsPath"" value=""D:\windows\Microsoft.NET\Framework\v3.5.x86ret\""/> </toolset> </msbuildToolsets> </configuration>"); ToolsetReader reader = new ToolsetConfigurationReader(new ReadApplicationConfiguration( ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); //this should throw ... bool caught = false; try { reader.ReadToolsets(values, new BuildPropertyGroup(), new BuildPropertyGroup(), true); } catch (InvalidToolsetDefinitionException) { caught = true; } Assertion.Assert(caught); }
public void GetToolsetDataFromConfiguration_PropertyValueIsEmptyString1() { ToolsetConfigurationReaderTestHelper.WriteConfigFile(@" <configuration> <configSections> <section name=""msbuildToolsets"" type=""Microsoft.Build.BuildEngine.ToolsetConfigurationSection, Microsoft.Build.Engine"" /> </configSections> <msbuildToolsets default=""2.0""> <toolset toolsVersion=""2.0""> <property name=""MSBuildBinPath"" value=""""/> </toolset> </msbuildToolsets> </configuration>"); ToolsetReader reader = new ToolsetConfigurationReader(new ReadApplicationConfiguration( ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); string defaultToolsVersion = reader.ReadToolsets(values, new BuildPropertyGroup(), new BuildPropertyGroup(), true); Assertion.AssertEquals(1, values.Count); Assertion.AssertEquals(0, values["2.0"].BuildProperties.Count); Assertion.AssertEquals(String.Empty, values["2.0"].ToolsPath); }
public void ThrowOnNonStringRegistryValueTypes() { RegistryKey rk = toolsVersionsRegistryKey.CreateSubKey("2.0"); rk.SetValue("MSBuildBinPath", "someBinPath"); // Non-string rk.SetValue("QuadWordValue", 42, RegistryValueKind.QWord); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); // Should throw ... string defaultToolsVersion = ToolsetReader.ReadAllToolsets ( values, new ToolsetRegistryReader(new MockRegistryKey(testRegistryPath)), new ToolsetConfigurationReader(new ReadApplicationConfiguration(ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)), new BuildPropertyGroup(), new BuildPropertyGroup(), ToolsetDefinitionLocations.Registry ); }
public void GetToolsetData_ConfigFileNotPresent() { // Registry Read RegistryKey key1 = toolsVersionsRegistryKey.CreateSubKey("2.0"); key1.SetValue("MSBuildBinPath", @"D:\somepath"); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); string defaultToolsVersion = ToolsetReader.ReadAllToolsets ( values, new ToolsetRegistryReader(new MockRegistryKey(testRegistryPath)), new ToolsetConfigurationReader(new ReadApplicationConfiguration(ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)), new BuildPropertyGroup(), new BuildPropertyGroup(), ToolsetDefinitionLocations.ConfigurationFile | ToolsetDefinitionLocations.Registry ); Assertion.AssertEquals(1, values.Count); Assertion.AssertEquals(0, values["2.0"].BuildProperties.Count); Assertion.AssertEquals(@"D:\somepath", values["2.0"].ToolsPath); }
public void GetToolsetData_RegistryNotPresent() { ToolsetConfigurationReaderTestHelper.WriteConfigFile(@" <configuration> <configSections> <section name=""msbuildToolsets"" type=""Microsoft.Build.BuildEngine.ToolsetConfigurationSection, Microsoft.Build.Engine"" /> </configSections> <msbuildToolsets default=""2.0""> <toolset toolsVersion=""2.0""> <property name=""MSBUILDBINPATH"" value=""D:\somedifferentpath""/> </toolset> </msbuildToolsets> </configuration>"); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); string defaultToolsVersion = ToolsetReader.ReadAllToolsets ( values, new ToolsetRegistryReader(new MockRegistryKey(testRegistryPath)), new ToolsetConfigurationReader(new ReadApplicationConfiguration(ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)), new BuildPropertyGroup(), new BuildPropertyGroup(), ToolsetDefinitionLocations.ConfigurationFile | ToolsetDefinitionLocations.Registry ); Assertion.AssertEquals(1, values.Count); Assertion.AssertEquals(0, values["2.0"].BuildProperties.Count); Assertion.AssertEquals(@"D:\somedifferentpath", values["2.0"].ToolsPath); }
public void GetToolsetData_NoMerging() { // Registry Read RegistryKey key1 = toolsVersionsRegistryKey.CreateSubKey("2.0"); key1.SetValue("MSBuildBinPath", @"D:\somepath"); key1.SetValue("SomeRegistryProperty", @"SomeRegistryValue"); // Set the config file contents as needed ToolsetConfigurationReaderTestHelper.WriteConfigFile(@" <configuration> <configSections> <section name=""msbuildToolsets"" type=""Microsoft.Build.BuildEngine.ToolsetConfigurationSection, Microsoft.Build.Engine"" /> </configSections> <msbuildToolsets default=""2.0""> <toolset toolsVersion=""2.0""> <property name=""MSBuildBinPath"" value=""D:\someotherpath""/> <property name=""SomeConfigProperty"" value=""SomeConfigValue""/> </toolset> </msbuildToolsets> </configuration>"); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); string defaultToolsVersion = ToolsetReader.ReadAllToolsets ( values, new ToolsetRegistryReader(new MockRegistryKey(testRegistryPath)), new ToolsetConfigurationReader(new ReadApplicationConfiguration(ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)), new BuildPropertyGroup(), new BuildPropertyGroup(), ToolsetDefinitionLocations.ConfigurationFile | ToolsetDefinitionLocations.Registry ); Assertion.AssertEquals(1, values.Count); Assertion.AssertEquals(1, values["2.0"].BuildProperties.Count); Assertion.AssertEquals(@"D:\someotherpath", values["2.0"].ToolsPath); Assertion.AssertEquals(null, values["2.0"].BuildProperties["SomeRegistryProperty"]); // Was zapped Assertion.AssertEquals(@"SomeConfigValue", values["2.0"].BuildProperties["SomeConfigProperty"].Value); }
public void GetToolsetDataFromConfiguration_EmptyMSBuildToolsetsNode() { ToolsetConfigurationReaderTestHelper.WriteConfigFile(@" <configuration> <configSections> <section name=""msbuildToolsets"" type=""Microsoft.Build.BuildEngine.ToolsetConfigurationSection, Microsoft.Build.Engine"" /> </configSections> <msbuildToolsets/> </configuration>"); ToolsetReader reader = new ToolsetConfigurationReader(new ReadApplicationConfiguration( ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); string defaultToolsVersion = reader.ReadToolsets(values, new BuildPropertyGroup(), new BuildPropertyGroup(), true); Assertion.AssertEquals(null, defaultToolsVersion); Assertion.AssertEquals(0, values.Count); }
public void RelativePathInValue() { ToolsetConfigurationReaderTestHelper.WriteConfigFile(@" <configuration> <configSections> <section name=""msbuildToolsets"" type=""Microsoft.Build.BuildEngine.ToolsetConfigurationSection, Microsoft.Build.Engine"" /> </configSections> <msbuildToolsets default=""2.0""> <toolset toolsVersion=""2.0""> <property name=""MSBuildToolsPath"" value=""..\foo""/> <!-- derelativization occurs before comparing toolspath and binpath --> <property name=""MSBuildBinPath"" value=""..\.\foo""/> </toolset> <toolset toolsVersion=""3.0""> <!-- properties are expanded before derelativization--> <property name=""MSBuildBinPath"" value=""$(DotDotSlash)bar""/> </toolset> </msbuildToolsets> </configuration>"); ToolsetReader reader = new ToolsetConfigurationReader(new ReadApplicationConfiguration( ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); BuildPropertyGroup pg = new BuildPropertyGroup(); pg.SetProperty("DotDotSlash", @"..\"); reader.ReadToolsets(values, new BuildPropertyGroup(), pg, true); string expected1 = Path.GetFullPath(Path.Combine(FileUtilities.CurrentExecutableDirectory, @"..\foo")); string expected2 = Path.GetFullPath(Path.Combine(FileUtilities.CurrentExecutableDirectory, @"..\bar")); Console.WriteLine(values["2.0"].ToolsPath); Assertion.AssertEquals(expected1, values["2.0"].ToolsPath); Assertion.AssertEquals(expected2, values["3.0"].ToolsPath); }
public void GetToolsetDataFromConfiguration_OnlyDefaultSpecified() { ToolsetConfigurationReaderTestHelper.WriteConfigFile(@" <configuration> <configSections> <section name=""msbuildToolsets"" type=""Microsoft.Build.BuildEngine.ToolsetConfigurationSection, Microsoft.Build.Engine"" /> </configSections> <msbuildToolsets default=""2.0""/> </configuration>"); ToolsetReader reader = new ToolsetConfigurationReader(new ReadApplicationConfiguration( ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); reader.ReadToolsets(values, new BuildPropertyGroup(), new BuildPropertyGroup(), true); }
public void SetDefaultToolsetVersion_SpecifiedNowhere() { ToolsetConfigurationReaderTestHelper.WriteConfigFile(@" <configuration> <configSections> <section name=""msbuildToolsets"" type=""Microsoft.Build.BuildEngine.ToolsetConfigurationSection, Microsoft.Build.Engine"" /> </configSections> <msbuildToolsets> <toolset toolsVersion=""3.5""> <property name=""MSBuildBinPath"" value=""D:\windows\Microsoft.NET\Framework\v2.0.x86ret\""/> </toolset> <toolset toolsVersion=""5.0""> <property name=""MSBuildBinPath"" value=""D:\windows\Microsoft.NET\Framework\v3.5.x86ret\""/> </toolset> </msbuildToolsets> </configuration>"); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); string defaultToolsVersion = ToolsetReader.ReadAllToolsets ( values, new ToolsetRegistryReader(new MockRegistryKey(testRegistryPath)), new ToolsetConfigurationReader(new ReadApplicationConfiguration(ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)), new BuildPropertyGroup(), new BuildPropertyGroup(), ToolsetDefinitionLocations.ConfigurationFile | ToolsetDefinitionLocations.Registry ); string expectedDefault = "2.0"; if (FrameworkLocationHelper.PathToDotNetFrameworkV20 == null) { expectedDefault = "4.0"; } Assertion.AssertEquals(expectedDefault, defaultToolsVersion); // built-in default }
public void InvalidPropertyNameInConfigFile() { ToolsetConfigurationReaderTestHelper.WriteConfigFile(@" <configuration> <configSections> <section name=""msbuildToolsets"" type=""Microsoft.Build.BuildEngine.ToolsetConfigurationSection, Microsoft.Build.Engine"" /> </configSections> <msbuildToolsets default=""2.0""> <toolset toolsVersion=""2.0""> <property name=""MSBuildBinPath"" value=""D:\windows\Microsoft.NET\Framework\v2.0.x86ret\""/> <property name=""&"" value=""foo""/> </toolset> </msbuildToolsets> </configuration>"); ToolsetReader reader = new ToolsetConfigurationReader(new ReadApplicationConfiguration( ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); //this should throw ... reader.ReadToolsets(values, new BuildPropertyGroup(), new BuildPropertyGroup(), true); }
public void PropertiesInToolsetsFromConfigFileAreExpandedInToolsPath() { // $(COMPUTERNAME) is just a convenient env var. $(NUMBER_OF_PROCESSORS) isn't defined on Longhorn ToolsetConfigurationReaderTestHelper.WriteConfigFile(@" <configuration> <configSections> <section name=""msbuildToolsets"" type=""Microsoft.Build.BuildEngine.ToolsetConfigurationSection, Microsoft.Build.Engine"" /> </configSections> <msbuildToolsets> <toolset toolsVersion=""3.5""> <property name=""p1"" value=""Microsoft.NET""/> <property name=""p2"" value=""windows""/> <property name=""MSBuildBinPath"" value=""D:\windows\$(p1)\Framework\v2.0.x86ret\$(COMPUTERNAME)""/> <property name=""MSBuildToolsPath"" value=""D:\$(p2)\$(p1)\Framework\v2.0.x86ret\$(COMPUTERNAME)""/> <property name=""p3"" value=""v3$(MSBuildToolsPath)""/> </toolset> </msbuildToolsets> </configuration>"); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); Engine e = new Engine(); BuildPropertyGroup initialProperties = new BuildPropertyGroup(); initialProperties.ImportProperties(e.EnvironmentProperties); initialProperties.ImportProperties(e.GlobalProperties); string defaultToolsVersion = ToolsetReader.ReadAllToolsets ( values, new ToolsetRegistryReader(new MockRegistryKey(testRegistryPath)), new ToolsetConfigurationReader(new ReadApplicationConfiguration(ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)), new BuildPropertyGroup(), initialProperties, ToolsetDefinitionLocations.ConfigurationFile | ToolsetDefinitionLocations.Registry ); Assertion.AssertEquals("Microsoft.NET", values["3.5"].BuildProperties["p1"].Value); Assertion.AssertEquals("windows", values["3.5"].BuildProperties["p2"].Value); string expectedToolsPath = @"D:\windows\Microsoft.NET\Framework\v2.0.x86ret\" + Environment.MachineName; Assertion.AssertEquals(expectedToolsPath, values["3.5"].ToolsPath); Assertion.AssertEquals("v3" + expectedToolsPath, values["3.5"].BuildProperties["p3"].Value); }
public void InvalidRelativePath() { string invalidRelativePath = @"..\|invalid|"; ToolsetConfigurationReaderTestHelper.WriteConfigFile(@" <configuration> <configSections> <section name=""msbuildToolsets"" type=""Microsoft.Build.BuildEngine.ToolsetConfigurationSection, Microsoft.Build.Engine"" /> </configSections> <msbuildToolsets default=""2.0""> <toolset toolsVersion=""2.0""> <property name=""MSBuildBinPath"" value=""" + invalidRelativePath + @"""/> </toolset> </msbuildToolsets> </configuration>"); ToolsetReader reader = new ToolsetConfigurationReader(new ReadApplicationConfiguration( ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); reader.ReadToolsets(values, new BuildPropertyGroup(), new BuildPropertyGroup(), true); // Don't crash (consistent with invalid absolute path) Assertion.AssertEquals(invalidRelativePath, values["2.0"].ToolsPath); }
private void RegistryValidRegistryExpressionHelper(string propertyExpression, string expectedValue) { // Registry Read currentVersionRegistryKey.SetValue("DefaultToolsVersion", "2.0"); RegistryKey key1 = toolsVersionsRegistryKey.CreateSubKey("2.0"); key1.SetValue("MSBuildBinPath", "xxxx"); key1.SetValue("p", propertyExpression); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); ToolsetReader.ReadAllToolsets ( values, new ToolsetRegistryReader(new MockRegistryKey(testRegistryPath)), new ToolsetConfigurationReader(new ReadApplicationConfiguration(ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)), new BuildPropertyGroup(), new BuildPropertyGroup(), ToolsetDefinitionLocations.Registry ); Assertion.AssertEquals(1, values.Count); Assertion.AssertEquals(expectedValue, values["2.0"].BuildProperties["p"].Value); }
public void GetToolsetDataFromConfiguration_XmlEscapedCharacters() { ToolsetConfigurationReaderTestHelper.WriteConfigFile(@" <configuration> <configSections> <section name=""msbuildToolsets"" type=""Microsoft.Build.BuildEngine.ToolsetConfigurationSection, Microsoft.Build.Engine"" /> </configSections> <msbuildToolsets default=""2>.0""> <toolset toolsVersion=""2>.0""> <property name=""MSBuildBinPath"" value=""x""/> <property name=""foo"" value=""some>value""/> </toolset> </msbuildToolsets> </configuration>"); ToolsetReader reader = new ToolsetConfigurationReader(new ReadApplicationConfiguration( ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); string defaultToolsVersion = reader.ReadToolsets(values, new BuildPropertyGroup(), new BuildPropertyGroup(), true); Assertion.AssertEquals("2>.0", defaultToolsVersion); Assertion.AssertEquals(1, values.Count); Assertion.AssertEquals(@"some>value", values["2>.0"].BuildProperties["foo"].Value); }
public void GetToolsetData_RegistryAndConfigNotPresent() { ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); string defaultToolsVersion = ToolsetReader.ReadAllToolsets ( values, new ToolsetRegistryReader(new MockRegistryKey(testRegistryPath)), new ToolsetConfigurationReader(new ReadApplicationConfiguration(ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)), new BuildPropertyGroup(), new BuildPropertyGroup(), ToolsetDefinitionLocations.ConfigurationFile | ToolsetDefinitionLocations.Registry ); Assertion.AssertEquals(1 /* fallback */, values.Count); }
public void PropertiesInRegistryCannotReferToOtherPropertiesInRegistry() { RegistryKey rk = toolsVersionsRegistryKey.CreateSubKey("2.0"); rk.SetValue("MSBuildBinPath", "c:\\x$(p1)"); rk.SetValue("p0", "$(p1)"); rk.SetValue("p1", "v"); rk.SetValue("p2", "$(p1)"); rk.SetValue("MSBuildToolsPath", "c:\\x$(p1)"); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); string defaultToolsVersion = ToolsetReader.ReadAllToolsets ( values, new ToolsetRegistryReader(new MockRegistryKey(testRegistryPath)), new ToolsetConfigurationReader(new ReadApplicationConfiguration(ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)), new BuildPropertyGroup(), new BuildPropertyGroup(), ToolsetDefinitionLocations.Registry ); Assertion.AssertEquals("", values["2.0"].BuildProperties["p0"].Value); Assertion.AssertEquals("v", values["2.0"].BuildProperties["p1"].Value); Assertion.AssertEquals("", values["2.0"].BuildProperties["p2"].Value); Assertion.AssertEquals("c:\\x", values["2.0"].ToolsPath); }
public void GetToolsetData_ReadConfigThrowsException() { // Registry Read RegistryKey key1 = toolsVersionsRegistryKey.CreateSubKey("2.0"); key1.SetValue("MSBuildBinPath", @"D:\somepath"); // Set the config helper to throw exception ToolsetConfigurationReaderTestHelper.WriteConfigFile(@"", new ConfigurationException()); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); ToolsetReader.ReadAllToolsets ( values, new ToolsetRegistryReader(new MockRegistryKey(testRegistryPath)), new ToolsetConfigurationReader(new ReadApplicationConfiguration(ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)), new BuildPropertyGroup(), new BuildPropertyGroup(), ToolsetDefinitionLocations.ConfigurationFile | ToolsetDefinitionLocations.Registry ); }
public void ToolsetInitializationFlagsSetToConfigurationFile() { // Set up registry with two tools versions and one property each currentVersionRegistryKey.SetValue("DefaultToolsVersion", "2.0"); RegistryKey key1 = toolsVersionsRegistryKey.CreateSubKey("2.0"); key1.SetValue("MSBuildBinPath", @"D:\somepath"); RegistryKey key2 = toolsVersionsRegistryKey.CreateSubKey("3.5"); key2.SetValue("MSBuildBinPath", @"D:\somepath2"); ToolsetConfigurationReaderTestHelper.WriteConfigFile(@" <configuration> <configSections> <section name=""msbuildToolsets"" type=""Microsoft.Build.BuildEngine.ToolsetConfigurationSection, Microsoft.Build.Engine"" /> </configSections> <msbuildToolsets default=""4.5""> <toolset toolsVersion=""4.5""> <property name=""MSBuildBinPath"" value=""D:\windows\Microsoft.NET\Framework\v2.0.x86ret\""/> </toolset> <toolset toolsVersion=""5.0""> <property name=""MSBuildBinPath"" value=""D:\windows\Microsoft.NET\Framework\v3.5.x86ret\""/> </toolset> </msbuildToolsets> </configuration>"); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); string defaultToolsVersion = ToolsetReader.ReadAllToolsets ( values, new ToolsetRegistryReader(new MockRegistryKey(testRegistryPath)), new ToolsetConfigurationReader(new ReadApplicationConfiguration(ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)), new BuildPropertyGroup(), new BuildPropertyGroup(), ToolsetDefinitionLocations.ConfigurationFile ); // Verifications Assertion.AssertEquals(2, values.Count); Assertion.AssertEquals("4.5", defaultToolsVersion); Assertion.AssertEquals(@"D:\windows\Microsoft.NET\Framework\v2.0.x86ret", values["4.5"].ToolsPath); Assertion.AssertEquals(@"D:\windows\Microsoft.NET\Framework\v3.5.x86ret", values["5.0"].ToolsPath); }
public void GetToolsetData_ReadRegistryOpenSubKeyThrowsException() { RegistryKeyWrapper mockRegistryKey = new MockRegistryKey(testRegistryPath, MockRegistryKey.WhereToThrow.OpenSubKey); ToolsetConfigurationReaderTestHelper.WriteConfigFile(@" <configuration> <configSections> <section name=""msbuildToolsets"" type=""Microsoft.Build.BuildEngine.ToolsetConfigurationSection, Microsoft.Build.Engine"" /> </configSections> <msbuildToolsets default=""2.0""> <toolset toolsVersion=""2.0""> <property name=""MSBuildBinPath"" value=""D:\somedifferentpath""/> </toolset> </msbuildToolsets> </configuration>"); ToolsetCollection values = new ToolsetCollection(new Engine(ToolsetDefinitionLocations.None)); string defaultToolsVersion = ToolsetReader.ReadAllToolsets ( values, new ToolsetRegistryReader(mockRegistryKey), new ToolsetConfigurationReader(new ReadApplicationConfiguration(ToolsetConfigurationReaderTestHelper.ReadApplicationConfigurationTest)), new BuildPropertyGroup(), new BuildPropertyGroup(), ToolsetDefinitionLocations.ConfigurationFile | ToolsetDefinitionLocations.Registry ); }