public void UnknownItem_Remove_ExistingChild_PreservesComments() { // Arrange var nugetConfigPath = "NuGet.Config"; var config = @" <configuration> <!-- This is a section --> <Section> <!-- Unknown Item --> <Unknown meta=""data""> <!-- Text child --> Text for test <!-- Item child --> <add key=""key"" value=""val"" /> </Unknown> </Section> </configuration>"; var expectedSetting = new UnknownItem("Unknown", attributes: new Dictionary <string, string>() { { "meta", "data" } }, children: new List <SettingBase>() { new AddItem("key", "val") }); using (var mockBaseDirectory = TestDirectory.Create()) { SettingsTestUtils.CreateConfigurationFile(nugetConfigPath, mockBaseDirectory, config); var settingsFile = new SettingsFile(mockBaseDirectory); // Act var section = settingsFile.GetSection("Section"); section.Should().NotBeNull(); var element = section.Items.FirstOrDefault() as UnknownItem; element.Should().NotBeNull(); element.Remove(element.Children.First()); settingsFile.AddOrUpdate("Section", element); settingsFile.SaveToDisk(); var expectedConfig = SettingsTestUtils.RemoveWhitespace(@"<?xml version=""1.0"" encoding=""utf-8""?> <configuration> <!-- This is a section --> <Section> <!-- Unknown Item --> <Unknown meta=""data""> <!-- Text child --> <!-- Item child --> <add key=""key"" value=""val"" /> </Unknown> </Section> </configuration>"); SettingsTestUtils.RemoveWhitespace(File.ReadAllText(Path.Combine(mockBaseDirectory, nugetConfigPath))).Should().Be(expectedConfig); // Assert SettingsTestUtils.DeepEquals(element, expectedSetting).Should().BeTrue(); } }
public void AddItem_GetValueAsPath_ResolvesPathsCorrectly() { // Arrange var nugetConfigPath = "NuGet.Config"; var config = @"<?xml version=""1.0"" encoding=""utf-8""?> <configuration> <SectionName> <!-- values that are relative paths --> <add key=""key1"" value=""..\value1"" /> <add key=""key2"" value=""a\b\c"" /> <add key=""key3"" value="".\a\b\c"" /> <!-- values that are not relative paths --> <add key=""key4"" value=""c:\value2"" /> <add key=""key5"" value=""http://value3"" /> <add key=""key6"" value=""\\a\b\c"" /> <add key=""key7"" value=""\a\b\c"" /> </SectionName> </configuration>"; if (!RuntimeEnvironmentHelper.IsWindows) { config = @"<?xml version=""1.0"" encoding=""utf-8""?> <configuration> <SectionName> <!-- values that are relative paths --> <add key=""key1"" value=""../value1"" /> <add key=""key2"" value=""a/b/c"" /> <add key=""key3"" value=""./a/b/c"" /> <!-- values that are not relative paths --> <add key=""key5"" value=""http://value3"" /> <add key=""key7"" value=""/a/b/c"" /> </SectionName> </configuration>"; } using (var mockBaseDirectory = TestDirectory.Create()) { ConfigurationFileTestUtility.CreateConfigurationFile(nugetConfigPath, mockBaseDirectory, config); var settings = new Settings(mockBaseDirectory); // Act var section = settings.GetSection("SectionName"); // Assert section.Should().NotBeNull(); section.Items.Should().NotBeEmpty(); section.Items.Should().AllBeOfType <AddItem>(); if (RuntimeEnvironmentHelper.IsWindows) { section.Items.Count.Should().Be(7); var item = section.GetFirstItemWithAttribute <AddItem>("key", "key1"); item.Should().NotBeNull(); item.GetValueAsPath().Should().Be(Path.Combine(mockBaseDirectory, @"..\value1")); item = section.GetFirstItemWithAttribute <AddItem>("key", "key2"); item.Should().NotBeNull(); item.GetValueAsPath().Should().Be(Path.Combine(mockBaseDirectory, @"a\b\c")); item = section.GetFirstItemWithAttribute <AddItem>("key", "key3"); item.Should().NotBeNull(); item.GetValueAsPath().Should().Be(Path.Combine(mockBaseDirectory, @".\a\b\c")); item = section.GetFirstItemWithAttribute <AddItem>("key", "key4"); item.Should().NotBeNull(); item.GetValueAsPath().Should().Be(@"c:\value2"); item = section.GetFirstItemWithAttribute <AddItem>("key", "key5"); item.Should().NotBeNull(); item.GetValueAsPath().Should().Be(@"http://value3"); item = section.GetFirstItemWithAttribute <AddItem>("key", "key6"); item.Should().NotBeNull(); item.GetValueAsPath().Should().Be(@"\\a\b\c"); item = section.GetFirstItemWithAttribute <AddItem>("key", "key7"); item.Should().NotBeNull(); item.GetValueAsPath().Should().Be(Path.Combine(Path.GetPathRoot(mockBaseDirectory), @"a\b\c")); } else { section.Items.Count.Should().Be(5); var item = section.GetFirstItemWithAttribute <AddItem>("key", "key1"); item.Should().NotBeNull(); item.GetValueAsPath().Should().Be(Path.Combine(mockBaseDirectory, @"../value1")); item = section.GetFirstItemWithAttribute <AddItem>("key", "key2"); item.Should().NotBeNull(); item.GetValueAsPath().Should().Be(Path.Combine(mockBaseDirectory, @"a/b/c")); item = section.GetFirstItemWithAttribute <AddItem>("key", "key3"); item.Should().NotBeNull(); item.GetValueAsPath().Should().Be(Path.Combine(mockBaseDirectory, @"./a/b/c")); item = section.GetFirstItemWithAttribute <AddItem>("key", "key5"); item.Should().NotBeNull(); item.GetValueAsPath().Should().Be(@"http://value3"); item = section.GetFirstItemWithAttribute <AddItem>("key", "key7"); item.Should().NotBeNull(); item.GetValueAsPath().Should().Be(@"/a/b/c"); } } }