From 99d51fb5021a5cad5acd7e7c5d76bb3a3cb90bcb Mon Sep 17 00:00:00 2001 From: mrward Date: Wed, 26 Jan 2011 22:40:54 +0000 Subject: [PATCH] Save the selected NuGet package source. --- .../Project/Src/PackageManagementOptions.cs | 25 +++- .../Project/Src/PackageManagementService.cs | 2 + .../Test/PackageManagement.Tests.csproj | 1 + .../Test/Src/PackageManagementOptionsTests.cs | 116 ++++++++++++++++++ .../Test/Src/PackageManagementServiceTests.cs | 42 ++++++- 5 files changed, 182 insertions(+), 4 deletions(-) create mode 100644 src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs index 501e206653..a6f6def689 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs @@ -12,10 +12,12 @@ namespace ICSharpCode.PackageManagement { public class PackageManagementOptions { - Properties properties; const string PackageSourcesPropertyName = "PackageSources"; const string PackageDirectoryPropertyName = "PackagesDirectory"; + const string ActivePackageSourcePropertyName = "ActivePackageSource"; + RegisteredPackageSources packageSources; + Properties properties; public PackageManagementOptions(Properties properties) { @@ -68,5 +70,26 @@ namespace ICSharpCode.PackageManagement get { return properties.Get(PackageDirectoryPropertyName, "packages"); } set { properties.Set(PackageDirectoryPropertyName, value); } } + + public PackageSource ActivePackageSource { + get { + if (properties.Contains(ActivePackageSourcePropertyName)) { + var registeredPackageSource = properties.Get(ActivePackageSourcePropertyName, null); + var packageSource = registeredPackageSource.ToPackageSource(); + if (PackageSources.Contains(packageSource)) { + return packageSource; + } + } + return null; + } + set { + if (value == null) { + properties.Remove(ActivePackageSourcePropertyName); + } else { + var packageSource = new RegisteredPackageSource(value); + properties.Set(ActivePackageSourcePropertyName, packageSource); + } + } + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs index 12f6e11522..11f476e9e1 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs @@ -111,6 +111,7 @@ namespace ICSharpCode.PackageManagement public PackageSource ActivePackageSource { get { + activePackageSource = options.ActivePackageSource; if (activePackageSource == null) { activePackageSource = options.PackageSources[0]; } @@ -119,6 +120,7 @@ namespace ICSharpCode.PackageManagement set { if (activePackageSource != value) { activePackageSource = value; + options.ActivePackageSource = value; activePackageRepository = null; } } diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj index 5e0c50ed24..c9c8292807 100644 --- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj +++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj @@ -105,6 +105,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs new file mode 100644 index 0000000000..451e5be79c --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs @@ -0,0 +1,116 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using System.IO; +using System.Text; +using System.Xml; + +using ICSharpCode.Core; +using ICSharpCode.PackageManagement; +using NuGet; +using NUnit.Framework; + +namespace PackageManagement.Tests +{ + [TestFixture] + public class PackageManagementOptionsTests + { + Properties properties; + PackageManagementOptions options; + + void CreateOptions() + { + CreateProperties(); + CreateOptions(properties); + } + + void CreateProperties() + { + properties = new Properties(); + } + + void CreateOptions(Properties properties) + { + options = new PackageManagementOptions(properties); + } + + void SaveOptions() + { + StringBuilder xml = new StringBuilder(); + StringWriter stringWriter = new StringWriter(xml); + using (XmlTextWriter writer = new XmlTextWriter(stringWriter)) { + properties.WriteProperties(writer); + } + } + + [Test] + public void ActivePackageSource_NoInitialPropertiesSet_ReturnsNull() + { + CreateOptions(); + PackageSource actualSource = options.ActivePackageSource; + Assert.IsNull(options.ActivePackageSource); + } + + [Test] + public void ActivePackageSource_ActivePackageSourceNonNullWhenPropertiesSaved_OnReloadingPropertiesActivatePackageSourceRemembered() + { + CreateOptions(); + var expectedSource = new PackageSource("http://source-url", "Test"); + options.PackageSources.Add(expectedSource); + options.ActivePackageSource = expectedSource; + CreateOptions(properties); + + PackageSource actualSource = options.ActivePackageSource; + Assert.AreEqual(expectedSource, actualSource); + } + + [Test] + public void ActivePackageSource_SetToNullAfterHavingNonNullValue_ReturnsNull() + { + CreateOptions(); + var source = new PackageSource("http://source-url", "Test"); + options.ActivePackageSource = source; + + options.ActivePackageSource = null; + + PackageSource actualSource = options.ActivePackageSource; + Assert.IsNull(actualSource); + } + + [Test] + public void ActivePackageSource_SaveActivePackageSource_DoesNotThrowSerializationError() + { + CreateOptions(); + var source = new PackageSource("http://source-url", "Test"); + options.ActivePackageSource = source; + + Assert.DoesNotThrow(() => SaveOptions()); + } + + [Test] + public void ActivePackageSource_SaveDefaultNullActivePackageSource_DoesNotThrowSerializationError() + { + CreateOptions(); + var source = options.ActivePackageSource; + + Assert.DoesNotThrow(() => SaveOptions()); + Assert.IsNull(source); + } + + [Test] + public void ActivePackageSource_ActivePackageSourceRemovedFromPackageSources_ActivePackageSourceSetToNull() + { + CreateOptions(); + var source = new PackageSource("http://source-url", "Test"); + options.PackageSources.Add(source); + + var differentSource = new PackageSource("http://different-url", "Test2"); + options.ActivePackageSource = differentSource; + + var activeSource = options.ActivePackageSource; + + Assert.IsNull(activeSource); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs index 6f433d1211..a38f10e125 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs @@ -22,19 +22,29 @@ namespace PackageManagement.Tests FakePackageManagementProjectService fakeProjectService; TestableProject testProject; + void CreatePackageSources() + { + packageSourcesHelper = new OneRegisteredPackageSourceHelper(); + } + void CreatePackageManagementService() + { + CreatePackageSources(); + CreatePackageManagementService(packageSourcesHelper.Options); + } + + void CreatePackageManagementService(PackageManagementOptions options) { testProject = ProjectHelper.CreateTestProject(); fakePackageRepositoryFactory = new FakePackageRepositoryFactory(); fakePackageManagerFactory = new FakePackageManagerFactory(); fakeProjectService = new FakePackageManagementProjectService(); fakeProjectService.CurrentProject = testProject; - packageSourcesHelper = new OneRegisteredPackageSourceHelper(); packageManagementService = - new PackageManagementService(packageSourcesHelper.Options, + new PackageManagementService(options, fakePackageRepositoryFactory, fakePackageManagerFactory, - fakeProjectService); + fakeProjectService); } [Test] @@ -314,5 +324,31 @@ namespace PackageManagement.Tests Assert.AreEqual(0, fakePackageRepositoryFactory.PackageSourcesPassedToCreateRepository.Count); } + + [Test] + public void ActivePackageSource_ChangedToNonNullPackageSource_SavedInOptions() + { + CreatePackageManagementService(); + + packageManagementService.Options.ActivePackageSource = null; + + var packageSource = new PackageSource("http://source-url", "Test"); + packageManagementService.Options.PackageSources.Add(packageSource); + packageManagementService.ActivePackageSource = packageSource; + + Assert.AreEqual(packageSource, packageManagementService.Options.ActivePackageSource); + } + + [Test] + public void ActivePackageSource_ActivePackageSourceNonNullInOptionsBeforeInstanceCreate_ActivePackageSourceReadFromOptions() + { + CreatePackageSources(); + var packageSource = new PackageSource("http://source-url", "Test"); + packageSourcesHelper.Options.PackageSources.Add(packageSource); + packageSourcesHelper.Options.ActivePackageSource = packageSource; + CreatePackageManagementService(packageSourcesHelper.Options); + + Assert.AreEqual(packageSource, packageManagementService.ActivePackageSource); + } } }