From 5870705edd4a586341db418685d9e9bd6bb3e9e6 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Sat, 7 Sep 2013 15:26:16 +0100 Subject: [PATCH] Fix recent NuGet packages not being saved in settings. --- .../Project/Src/PackageManagementOptions.cs | 16 +- .../Test/PackageManagement.Tests.csproj | 3 + .../Test/Src/PackageManagementOptionsTests.cs | 912 +++++++++--------- 3 files changed, 469 insertions(+), 462 deletions(-) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs index a95ec59472..91440c5bee 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs @@ -3,8 +3,8 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Collections.Specialized; - using ICSharpCode.Core; using NuGet; @@ -17,7 +17,7 @@ namespace ICSharpCode.PackageManagement RegisteredPackageSourceSettings registeredPackageSourceSettings; Properties properties; - List recentPackages; + ObservableCollection recentPackages; PackageRestoreConsent packageRestoreConsent; public PackageManagementOptions(Properties properties, ISettings settings) @@ -67,8 +67,16 @@ namespace ICSharpCode.PackageManagement void ReadRecentPackages() { - var defaultRecentPackages = new List(); - recentPackages = properties.Get>(RecentPackagesPropertyName, defaultRecentPackages); + IReadOnlyList savedRecentPackages = properties.GetList(RecentPackagesPropertyName); + + recentPackages = new ObservableCollection(); + recentPackages.AddRange(savedRecentPackages); + recentPackages.CollectionChanged += RecentPackagesCollectionChanged; + } + + void RecentPackagesCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) + { + properties.SetList(RecentPackagesPropertyName, recentPackages); } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj index dc28f58fbd..5f226ad72d 100644 --- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj +++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj @@ -69,6 +69,9 @@ 4.0 + + 3.5 + 3.0 diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs index a2e3d9394f..68f5c7f317 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs @@ -1,458 +1,454 @@ -//// 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.Collections.Generic; -//using System.IO; -//using System.Text; -//using System.Xml; -//using ICSharpCode.Core; -//using ICSharpCode.PackageManagement; -//using ICSharpCode.PackageManagement.Design; -//using NuGet; -//using NUnit.Framework; -//using PackageManagement.Tests.Helpers; -// -//namespace PackageManagement.Tests -//{ -// [TestFixture] -// public class PackageManagementOptionsTests -// { -// Properties properties; -// PackageManagementOptions options; -// FakeSettings fakeSettings; -// -// void CreateOptions() -// { -// CreateProperties(); -// CreateSettings(); -// CreateOptions(properties, fakeSettings); -// } -// -// void CreateProperties() -// { -// properties = new Properties(); -// } -// -// void CreateSettings() -// { -// fakeSettings = new FakeSettings(); -// } -// -// void CreateOptions(Properties properties) -// { -// CreateSettings(); -// CreateOptions(properties, fakeSettings); -// } -// -// void CreateOptions(FakeSettings fakeSettings) -// { -// CreateProperties(); -// options = new PackageManagementOptions(properties, fakeSettings); -// } -// -// void CreateOptions(Properties properties, FakeSettings fakeSettings) -// { -// options = new PackageManagementOptions(properties, fakeSettings); -// } -// -// void SaveOptions() -// { -// StringBuilder xml = new StringBuilder(); -// StringWriter stringWriter = new StringWriter(xml); -// using (XmlTextWriter writer = new XmlTextWriter(stringWriter)) { -// properties.WriteProperties(writer); -// } -// } -// -// RecentPackageInfo AddRecentPackageToOptions(string id, string version) -// { -// var recentPackage = new RecentPackageInfo(id, new SemanticVersion(version)); -// options.RecentPackages.Add(recentPackage); -// return recentPackage; -// } -// -// void EnablePackageRestoreInSettings() -// { -// fakeSettings.SetPackageRestoreSetting(true); -// } -// -// [Test] -// public void PackageSources_OnePackageSourceInSettings_ContainsSinglePackageSourceFromSettings() -// { -// CreateSettings(); -// var packageSource = new PackageSource("http://codeplex.com", "Test"); -// fakeSettings.AddFakePackageSource(packageSource); -// CreateOptions(fakeSettings); -// -// RegisteredPackageSources actualSources = options.PackageSources; -// -// List expectedSources = new List(); -// expectedSources.Add(packageSource); -// -// Assert.AreEqual(expectedSources, actualSources); -// } -// -// [Test] -// public void PackageSources_NoPackageSourceInSavedSettings_ContainsDefaultPackageSource() -// { -// CreateSettings(); -// CreateOptions(fakeSettings); -// -// List expectedSources = new List(); -// expectedSources.Add(RegisteredPackageSources.DefaultPackageSource); -// -// RegisteredPackageSources actualPackageSources = options.PackageSources; -// -// CollectionAssert.AreEqual(expectedSources, actualPackageSources); -// } -// -// [Test] -// public void PackageSources_NoPackageSourceInSavedSettings_DefaultPackageSourceAddedToSettings() -// { -// CreateSettings(); -// CreateOptions(fakeSettings); -// -// RegisteredPackageSources packageSources = options.PackageSources; -// -// PackageSource defaultSource = RegisteredPackageSources.DefaultPackageSource; -// -// var expectedSavedPackageSourceSettings = new List>(); -// string name = defaultSource.Name; -// string sourceUrl = defaultSource.Source; -// expectedSavedPackageSourceSettings.Add(new KeyValuePair(name, sourceUrl)); -// -// IList> actualSavedPackageSourceSettings = fakeSettings.GetValuesPassedToSetValuesForPackageSourcesSection(); -// -// Assert.AreEqual(expectedSavedPackageSourceSettings, actualSavedPackageSourceSettings); -// } -// -// [Test] -// public void PackageSources_OnePackageSourceAdded_PackageSourceSavedInSettings() -// { -// CreateSettings(); -// CreateOptions(fakeSettings); -// RegisteredPackageSources registeredPackageSources = options.PackageSources; -// -// var packageSource = new PackageSource("http://codeplex.com", "Test"); -// registeredPackageSources.Clear(); -// registeredPackageSources.Add(packageSource); -// -// var expectedSavedPackageSourceSettings = new List>(); -// expectedSavedPackageSourceSettings.Add(new KeyValuePair("Test", "http://codeplex.com")); -// -// IList> actualSavedPackageSourceSettings = fakeSettings.GetValuesPassedToSetValuesForPackageSourcesSection(); -// -// Assert.AreEqual(expectedSavedPackageSourceSettings, actualSavedPackageSourceSettings); -// } -// -// [Test] -// public void PackageSources_OnePackageSourceAdded_PackageSourcesSectionDeletedFromSettings() -// { -// CreateSettings(); -// CreateOptions(fakeSettings); -// RegisteredPackageSources registeredPackageSources = options.PackageSources; -// -// var packageSource = new PackageSource("http://codeplex.com", "Test"); -// registeredPackageSources.Clear(); -// registeredPackageSources.Add(packageSource); -// -// bool sectionDeleted = fakeSettings.IsPackageSourcesSectionDeleted; -// -// Assert.IsTrue(sectionDeleted); -// } -// -// [Test] -// public void PackageSources_SettingsFilesDoesNotExistSoSettingsReturnsNullForPackageSourcesSection_DoesNotThrowException() -// { -// CreateSettings(); -// fakeSettings.MakePackageSourceSectionsNull(); -// CreateOptions(fakeSettings); -// -// RegisteredPackageSources packageSources = null; -// Assert.DoesNotThrow(() => packageSources = options.PackageSources); -// } -// -// [Test] -// public void ActivePackageSource_NoInitialPropertiesSet_ReturnsNull() -// { -// CreateOptions(); -// PackageSource actualSource = options.ActivePackageSource; -// Assert.IsNull(options.ActivePackageSource); -// } -// -// [Test] -// public void ActivePackageSource_SourceChanged_ActivePackageSourceUpdatedInSettings() -// { -// CreateOptions(); -// var packageSource = new PackageSource("http://sharpdevelop.com", "Test"); -// -// options.ActivePackageSource = packageSource; -// -// var expectedKeyValuePair = new KeyValuePair("Test", "http://sharpdevelop.com"); -// KeyValuePair actualKeyValuePair = fakeSettings.GetValuePassedToSetValueForActivePackageSourceSection(); -// -// Assert.AreEqual(expectedKeyValuePair, actualKeyValuePair); -// } -// -// [Test] -// public void ActivePackageSource_ActivePackageSourceNonNullInSettings_ReturnsActivatePackageSourceInSavedSettings() -// { -// CreateSettings(); -// var expectedSource = new PackageSource("http://source-url", "Test"); -// fakeSettings.SetFakeActivePackageSource(expectedSource); -// fakeSettings.AddFakePackageSource(expectedSource); -// CreateOptions(fakeSettings); -// -// 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_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; -// -// PackageSource activeSource = options.ActivePackageSource; -// -// Assert.IsNull(activeSource); -// } -// -// [Test] -// public void ActivePackageSource_ActivePackageSourceChanged_ActivePackageSourceSectionRemovedFromSettings() -// { -// CreateOptions(); -// -// options.ActivePackageSource = new PackageSource("http://sharpdevelop.com", "Test"); -// -// bool sectionDeleted = fakeSettings.IsActivePackageSourceSectionDeleted; -// -// Assert.IsTrue(sectionDeleted); -// } -// -// [Test] -// public void ActivePackageSource_OneActivePackageSourceInSettingsAndActivePackageSourceSetToNull_ActivePackageSourceSectionRemoved() -// { -// CreateSettings(); -// var expectedSource = new PackageSource("http://source-url", "Test"); -// fakeSettings.SetFakeActivePackageSource(expectedSource); -// fakeSettings.AddFakePackageSource(expectedSource); -// CreateOptions(fakeSettings); -// -// options.ActivePackageSource = null; -// -// bool sectionRemoved = fakeSettings.IsActivePackageSourceSectionDeleted; -// -// Assert.IsTrue(sectionRemoved); -// } -// -// [Test] -// public void ActivePackageSource_SettingsFilesDoesNotExistSoSettingsReturnsNullForActivePackageSourceSection_DoesNotThrowException() -// { -// CreateSettings(); -// fakeSettings.MakeActivePackageSourceSectionNull(); -// CreateOptions(fakeSettings); -// -// PackageSource activePackageSource = null; -// Assert.DoesNotThrow(() => activePackageSource = options.ActivePackageSource); -// } -// -// [Test] -// public void RecentPackages_OneRecentPackageAddedAndOptionsReloadedFromSavedProperties_ContainsOneRecentPackageThatWasSavedPreviously() -// { -// CreateOptions(); -// var package = new FakePackage("Test"); -// var recentPackage = new RecentPackageInfo(package); -// options.RecentPackages.Add(recentPackage); -// CreateOptions(properties); -// -// IList recentPackages = options.RecentPackages; -// -// var expectedRecentPackages = new RecentPackageInfo[] { -// new RecentPackageInfo(package) -// }; -// -// RecentPackageInfoCollectionAssert.AreEqual(expectedRecentPackages, recentPackages); -// } -// -// [Test] -// public void RecentPackages_SaveRecentPackages_DoesNotThrowInvalidOperationException() -// { -// CreateOptions(); -// RecentPackageInfo recentPackage = AddRecentPackageToOptions("id", "1.0"); -// -// Assert.DoesNotThrow(() => SaveOptions()); -// } -// -// [Test] -// public void ActivePackageSource_AggregatePackageSourceIsActivePackageSourceInSettings_ReturnsAggregatePackageSource() -// { -// CreateSettings(); -// PackageSource expectedPackageSource = RegisteredPackageSourceSettings.AggregatePackageSource; -// fakeSettings.SetFakeActivePackageSource(expectedPackageSource); -// CreateOptions(fakeSettings); -// -// PackageSource activePackageSource = options.ActivePackageSource; -// -// Assert.AreEqual(expectedPackageSource, activePackageSource); -// } -// -// [Test] -// public void PackageSources_OneEnabledPackageSourceInSettings_ContainsSingleEnabledPackageSourceFromSettings() -// { -// CreateSettings(); -// var packageSource = new PackageSource("http://codeplex.com", "Test") { IsEnabled = true }; -// fakeSettings.AddFakePackageSource(packageSource); -// CreateOptions(fakeSettings); -// -// RegisteredPackageSources actualSources = options.PackageSources; -// -// Assert.IsTrue(actualSources[0].IsEnabled); -// } -// -// [Test] -// public void PackageSources_OneDisabledPackageSourceInSettings_ContainsSingleDisabledPackageSourceFromSettings() -// { -// CreateSettings(); -// var packageSource = new PackageSource("http://codeplex.com", "Test") { IsEnabled = false }; -// fakeSettings.AddFakePackageSource(packageSource); -// fakeSettings.AddDisabledPackageSource(packageSource); -// CreateOptions(fakeSettings); -// -// RegisteredPackageSources actualSources = options.PackageSources; -// -// Assert.IsFalse(actualSources[0].IsEnabled); -// } -// -// [Test] -// public void PackageSources_OnePackageSourceAdded_DisabledPackageSourcesSectionDeletedFromSettings() -// { -// CreateSettings(); -// CreateOptions(fakeSettings); -// RegisteredPackageSources registeredPackageSources = options.PackageSources; -// -// var packageSource = new PackageSource("http://codeplex.com", "Test"); -// registeredPackageSources.Clear(); -// registeredPackageSources.Add(packageSource); -// -// bool sectionDeleted = fakeSettings.IsDisabledPackageSourcesSectionDeleted; -// -// Assert.IsTrue(sectionDeleted); -// } -// -// [Test] -// public void PackageSources_OneDisabledPackageSourceAdded_DisabledPackageSourcesSectionSaved() -// { -// CreateSettings(); -// CreateOptions(fakeSettings); -// RegisteredPackageSources registeredPackageSources = options.PackageSources; -// -// var packageSource = new PackageSource("http://codeplex.com", "Test") { IsEnabled = false }; -// registeredPackageSources.Clear(); -// registeredPackageSources.Add(packageSource); -// -// var expectedSavedPackageSourceSettings = new List>(); -// expectedSavedPackageSourceSettings.Add(new KeyValuePair(packageSource.Name, "true")); -// -// IList> actualSavedPackageSourceSettings = -// fakeSettings.GetValuesPassedToSetValuesForDisabledPackageSourcesSection(); -// Assert.AreEqual(expectedSavedPackageSourceSettings, actualSavedPackageSourceSettings); -// } -// -// [Test] -// public void PackageSources_OneEnabledPackageSourceAdded_DisabledPackageSourcesSectionNotChanged() -// { -// CreateSettings(); -// CreateOptions(fakeSettings); -// RegisteredPackageSources registeredPackageSources = options.PackageSources; -// -// var packageSource = new PackageSource("http://codeplex.com", "Test") { IsEnabled = true }; -// registeredPackageSources.Clear(); -// registeredPackageSources.Add(packageSource); -// -// bool result = fakeSettings.AnyValuesPassedToSetValuesForDisabledPackageSourcesSection; -// -// Assert.IsFalse(result); -// } -// -// [Test] -// public void IsPackageRestoreEnabled_EnabledInSettings_ReturnsTrue() -// { -// CreateSettings(); -// EnablePackageRestoreInSettings(); -// CreateOptions(fakeSettings); -// -// bool enabled = options.IsPackageRestoreEnabled; -// -// Assert.IsTrue(enabled); -// } -// -// [Test] -// public void IsPackageRestoreEnabled_PackageRestoreNotInSettings_ReturnsTrue() -// { -// CreateOptions(); -// -// bool enabled = options.IsPackageRestoreEnabled; -// -// Assert.IsTrue(enabled); -// } -// -// [Test] -// public void IsPackageRestoreEnabled_NotInSettingsOriginallyButSetToTrue_PackageRestoreEnabledInSettings() -// { -// CreateOptions(); -// -// options.IsPackageRestoreEnabled = true; -// -// KeyValuePair keyPair = fakeSettings.GetValuePassedToSetValueForPackageRestoreSection(); -// -// Assert.AreEqual("enabled", keyPair.Key); -// Assert.AreEqual("True", keyPair.Value); -// } -// -// [Test] -// public void IsPackageRestoreEnabled_OriginallyEnabledInSettingsButSetToTrue_PackageRestoreSectionIsNotDeletedFromSettings() -// { -// CreateSettings(); -// EnablePackageRestoreInSettings(); -// CreateOptions(fakeSettings); -// -// options.IsPackageRestoreEnabled = false; -// -// bool deleted = fakeSettings.IsPackageRestoreSectionDeleted; -// Assert.IsFalse(deleted); -// } -// -// [Test] -// public void IsPackageRestoreEnabled_OriginallyEnabledInSettingsButSetToTrue_PackageRestoreIsFalseInSettings() -// { -// CreateSettings(); -// EnablePackageRestoreInSettings(); -// CreateOptions(fakeSettings); -// -// options.IsPackageRestoreEnabled = false; -// -// KeyValuePair keyValuePair = fakeSettings.GetValuePassedToSetValueForPackageRestoreSection(); -// Assert.AreEqual("False", keyValuePair.Value); -// } -// } -//} +// 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.Collections.Generic; +using System.IO; +using System.Text; +using System.Xml; +using ICSharpCode.Core; +using ICSharpCode.PackageManagement; +using ICSharpCode.PackageManagement.Design; +using NuGet; +using NUnit.Framework; +using PackageManagement.Tests.Helpers; + +namespace PackageManagement.Tests +{ + [TestFixture] + public class PackageManagementOptionsTests + { + Properties properties; + PackageManagementOptions options; + FakeSettings fakeSettings; + + void CreateOptions() + { + CreateProperties(); + CreateSettings(); + CreateOptions(properties, fakeSettings); + } + + void CreateProperties() + { + properties = new Properties(); + } + + void CreateSettings() + { + fakeSettings = new FakeSettings(); + } + + void CreateOptions(Properties properties) + { + CreateSettings(); + CreateOptions(properties, fakeSettings); + } + + void CreateOptions(FakeSettings fakeSettings) + { + CreateProperties(); + options = new PackageManagementOptions(properties, fakeSettings); + } + + void CreateOptions(Properties properties, FakeSettings fakeSettings) + { + options = new PackageManagementOptions(properties, fakeSettings); + } + + void SaveOptions() + { + properties.Save(); + } + + RecentPackageInfo AddRecentPackageToOptions(string id, string version) + { + var recentPackage = new RecentPackageInfo(id, new SemanticVersion(version)); + options.RecentPackages.Add(recentPackage); + return recentPackage; + } + + void EnablePackageRestoreInSettings() + { + fakeSettings.SetPackageRestoreSetting(true); + } + + [Test] + public void PackageSources_OnePackageSourceInSettings_ContainsSinglePackageSourceFromSettings() + { + CreateSettings(); + var packageSource = new PackageSource("http://codeplex.com", "Test"); + fakeSettings.AddFakePackageSource(packageSource); + CreateOptions(fakeSettings); + + RegisteredPackageSources actualSources = options.PackageSources; + + List expectedSources = new List(); + expectedSources.Add(packageSource); + + Assert.AreEqual(expectedSources, actualSources); + } + + [Test] + public void PackageSources_NoPackageSourceInSavedSettings_ContainsDefaultPackageSource() + { + CreateSettings(); + CreateOptions(fakeSettings); + + List expectedSources = new List(); + expectedSources.Add(RegisteredPackageSources.DefaultPackageSource); + + RegisteredPackageSources actualPackageSources = options.PackageSources; + + CollectionAssert.AreEqual(expectedSources, actualPackageSources); + } + + [Test] + public void PackageSources_NoPackageSourceInSavedSettings_DefaultPackageSourceAddedToSettings() + { + CreateSettings(); + CreateOptions(fakeSettings); + + RegisteredPackageSources packageSources = options.PackageSources; + + PackageSource defaultSource = RegisteredPackageSources.DefaultPackageSource; + + var expectedSavedPackageSourceSettings = new List>(); + string name = defaultSource.Name; + string sourceUrl = defaultSource.Source; + expectedSavedPackageSourceSettings.Add(new KeyValuePair(name, sourceUrl)); + + IList> actualSavedPackageSourceSettings = fakeSettings.GetValuesPassedToSetValuesForPackageSourcesSection(); + + Assert.AreEqual(expectedSavedPackageSourceSettings, actualSavedPackageSourceSettings); + } + + [Test] + public void PackageSources_OnePackageSourceAdded_PackageSourceSavedInSettings() + { + CreateSettings(); + CreateOptions(fakeSettings); + RegisteredPackageSources registeredPackageSources = options.PackageSources; + + var packageSource = new PackageSource("http://codeplex.com", "Test"); + registeredPackageSources.Clear(); + registeredPackageSources.Add(packageSource); + + var expectedSavedPackageSourceSettings = new List>(); + expectedSavedPackageSourceSettings.Add(new KeyValuePair("Test", "http://codeplex.com")); + + IList> actualSavedPackageSourceSettings = fakeSettings.GetValuesPassedToSetValuesForPackageSourcesSection(); + + Assert.AreEqual(expectedSavedPackageSourceSettings, actualSavedPackageSourceSettings); + } + + [Test] + public void PackageSources_OnePackageSourceAdded_PackageSourcesSectionDeletedFromSettings() + { + CreateSettings(); + CreateOptions(fakeSettings); + RegisteredPackageSources registeredPackageSources = options.PackageSources; + + var packageSource = new PackageSource("http://codeplex.com", "Test"); + registeredPackageSources.Clear(); + registeredPackageSources.Add(packageSource); + + bool sectionDeleted = fakeSettings.IsPackageSourcesSectionDeleted; + + Assert.IsTrue(sectionDeleted); + } + + [Test] + public void PackageSources_SettingsFilesDoesNotExistSoSettingsReturnsNullForPackageSourcesSection_DoesNotThrowException() + { + CreateSettings(); + fakeSettings.MakePackageSourceSectionsNull(); + CreateOptions(fakeSettings); + + RegisteredPackageSources packageSources = null; + Assert.DoesNotThrow(() => packageSources = options.PackageSources); + } + + [Test] + public void ActivePackageSource_NoInitialPropertiesSet_ReturnsNull() + { + CreateOptions(); + PackageSource actualSource = options.ActivePackageSource; + Assert.IsNull(options.ActivePackageSource); + } + + [Test] + public void ActivePackageSource_SourceChanged_ActivePackageSourceUpdatedInSettings() + { + CreateOptions(); + var packageSource = new PackageSource("http://sharpdevelop.com", "Test"); + + options.ActivePackageSource = packageSource; + + var expectedKeyValuePair = new KeyValuePair("Test", "http://sharpdevelop.com"); + KeyValuePair actualKeyValuePair = fakeSettings.GetValuePassedToSetValueForActivePackageSourceSection(); + + Assert.AreEqual(expectedKeyValuePair, actualKeyValuePair); + } + + [Test] + public void ActivePackageSource_ActivePackageSourceNonNullInSettings_ReturnsActivatePackageSourceInSavedSettings() + { + CreateSettings(); + var expectedSource = new PackageSource("http://source-url", "Test"); + fakeSettings.SetFakeActivePackageSource(expectedSource); + fakeSettings.AddFakePackageSource(expectedSource); + CreateOptions(fakeSettings); + + 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_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; + + PackageSource activeSource = options.ActivePackageSource; + + Assert.IsNull(activeSource); + } + + [Test] + public void ActivePackageSource_ActivePackageSourceChanged_ActivePackageSourceSectionRemovedFromSettings() + { + CreateOptions(); + + options.ActivePackageSource = new PackageSource("http://sharpdevelop.com", "Test"); + + bool sectionDeleted = fakeSettings.IsActivePackageSourceSectionDeleted; + + Assert.IsTrue(sectionDeleted); + } + + [Test] + public void ActivePackageSource_OneActivePackageSourceInSettingsAndActivePackageSourceSetToNull_ActivePackageSourceSectionRemoved() + { + CreateSettings(); + var expectedSource = new PackageSource("http://source-url", "Test"); + fakeSettings.SetFakeActivePackageSource(expectedSource); + fakeSettings.AddFakePackageSource(expectedSource); + CreateOptions(fakeSettings); + + options.ActivePackageSource = null; + + bool sectionRemoved = fakeSettings.IsActivePackageSourceSectionDeleted; + + Assert.IsTrue(sectionRemoved); + } + + [Test] + public void ActivePackageSource_SettingsFilesDoesNotExistSoSettingsReturnsNullForActivePackageSourceSection_DoesNotThrowException() + { + CreateSettings(); + fakeSettings.MakeActivePackageSourceSectionNull(); + CreateOptions(fakeSettings); + + PackageSource activePackageSource = null; + Assert.DoesNotThrow(() => activePackageSource = options.ActivePackageSource); + } + + [Test] + public void RecentPackages_OneRecentPackageAddedAndOptionsReloadedFromSavedProperties_ContainsOneRecentPackageThatWasSavedPreviously() + { + CreateOptions(); + var package = new FakePackage("Test"); + var recentPackage = new RecentPackageInfo(package); + options.RecentPackages.Add(recentPackage); + CreateOptions(properties); + + IList recentPackages = options.RecentPackages; + + var expectedRecentPackages = new RecentPackageInfo[] { + new RecentPackageInfo(package) + }; + + RecentPackageInfoCollectionAssert.AreEqual(expectedRecentPackages, recentPackages); + } + + [Test] + public void RecentPackages_SaveRecentPackages_DoesNotThrowInvalidOperationException() + { + CreateOptions(); + RecentPackageInfo recentPackage = AddRecentPackageToOptions("id", "1.0"); + + Assert.DoesNotThrow(() => SaveOptions()); + } + + [Test] + public void ActivePackageSource_AggregatePackageSourceIsActivePackageSourceInSettings_ReturnsAggregatePackageSource() + { + CreateSettings(); + PackageSource expectedPackageSource = RegisteredPackageSourceSettings.AggregatePackageSource; + fakeSettings.SetFakeActivePackageSource(expectedPackageSource); + CreateOptions(fakeSettings); + + PackageSource activePackageSource = options.ActivePackageSource; + + Assert.AreEqual(expectedPackageSource, activePackageSource); + } + + [Test] + public void PackageSources_OneEnabledPackageSourceInSettings_ContainsSingleEnabledPackageSourceFromSettings() + { + CreateSettings(); + var packageSource = new PackageSource("http://codeplex.com", "Test") { IsEnabled = true }; + fakeSettings.AddFakePackageSource(packageSource); + CreateOptions(fakeSettings); + + RegisteredPackageSources actualSources = options.PackageSources; + + Assert.IsTrue(actualSources[0].IsEnabled); + } + + [Test] + public void PackageSources_OneDisabledPackageSourceInSettings_ContainsSingleDisabledPackageSourceFromSettings() + { + CreateSettings(); + var packageSource = new PackageSource("http://codeplex.com", "Test") { IsEnabled = false }; + fakeSettings.AddFakePackageSource(packageSource); + fakeSettings.AddDisabledPackageSource(packageSource); + CreateOptions(fakeSettings); + + RegisteredPackageSources actualSources = options.PackageSources; + + Assert.IsFalse(actualSources[0].IsEnabled); + } + + [Test] + public void PackageSources_OnePackageSourceAdded_DisabledPackageSourcesSectionDeletedFromSettings() + { + CreateSettings(); + CreateOptions(fakeSettings); + RegisteredPackageSources registeredPackageSources = options.PackageSources; + + var packageSource = new PackageSource("http://codeplex.com", "Test"); + registeredPackageSources.Clear(); + registeredPackageSources.Add(packageSource); + + bool sectionDeleted = fakeSettings.IsDisabledPackageSourcesSectionDeleted; + + Assert.IsTrue(sectionDeleted); + } + + [Test] + public void PackageSources_OneDisabledPackageSourceAdded_DisabledPackageSourcesSectionSaved() + { + CreateSettings(); + CreateOptions(fakeSettings); + RegisteredPackageSources registeredPackageSources = options.PackageSources; + + var packageSource = new PackageSource("http://codeplex.com", "Test") { IsEnabled = false }; + registeredPackageSources.Clear(); + registeredPackageSources.Add(packageSource); + + var expectedSavedPackageSourceSettings = new List>(); + expectedSavedPackageSourceSettings.Add(new KeyValuePair(packageSource.Name, "true")); + + IList> actualSavedPackageSourceSettings = + fakeSettings.GetValuesPassedToSetValuesForDisabledPackageSourcesSection(); + Assert.AreEqual(expectedSavedPackageSourceSettings, actualSavedPackageSourceSettings); + } + + [Test] + public void PackageSources_OneEnabledPackageSourceAdded_DisabledPackageSourcesSectionNotChanged() + { + CreateSettings(); + CreateOptions(fakeSettings); + RegisteredPackageSources registeredPackageSources = options.PackageSources; + + var packageSource = new PackageSource("http://codeplex.com", "Test") { IsEnabled = true }; + registeredPackageSources.Clear(); + registeredPackageSources.Add(packageSource); + + bool result = fakeSettings.AnyValuesPassedToSetValuesForDisabledPackageSourcesSection; + + Assert.IsFalse(result); + } + + [Test] + public void IsPackageRestoreEnabled_EnabledInSettings_ReturnsTrue() + { + CreateSettings(); + EnablePackageRestoreInSettings(); + CreateOptions(fakeSettings); + + bool enabled = options.IsPackageRestoreEnabled; + + Assert.IsTrue(enabled); + } + + [Test] + public void IsPackageRestoreEnabled_PackageRestoreNotInSettings_ReturnsTrue() + { + CreateOptions(); + + bool enabled = options.IsPackageRestoreEnabled; + + Assert.IsTrue(enabled); + } + + [Test] + public void IsPackageRestoreEnabled_NotInSettingsOriginallyButSetToTrue_PackageRestoreEnabledInSettings() + { + CreateOptions(); + + options.IsPackageRestoreEnabled = true; + + KeyValuePair keyPair = fakeSettings.GetValuePassedToSetValueForPackageRestoreSection(); + + Assert.AreEqual("enabled", keyPair.Key); + Assert.AreEqual("True", keyPair.Value); + } + + [Test] + public void IsPackageRestoreEnabled_OriginallyEnabledInSettingsButSetToTrue_PackageRestoreSectionIsNotDeletedFromSettings() + { + CreateSettings(); + EnablePackageRestoreInSettings(); + CreateOptions(fakeSettings); + + options.IsPackageRestoreEnabled = false; + + bool deleted = fakeSettings.IsPackageRestoreSectionDeleted; + Assert.IsFalse(deleted); + } + + [Test] + public void IsPackageRestoreEnabled_OriginallyEnabledInSettingsButSetToTrue_PackageRestoreIsFalseInSettings() + { + CreateSettings(); + EnablePackageRestoreInSettings(); + CreateOptions(fakeSettings); + + options.IsPackageRestoreEnabled = false; + + KeyValuePair keyValuePair = fakeSettings.GetValuePassedToSetValueForPackageRestoreSection(); + Assert.AreEqual("False", keyValuePair.Value); + } + } +}