diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
index f8132152b6..b8f8353ecf 100644
--- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
+++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
@@ -77,6 +77,7 @@
+
@@ -143,6 +144,7 @@
+
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs
index 0c870f67bd..c67a57d442 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs
@@ -10,15 +10,16 @@ namespace ICSharpCode.PackageManagement.Design
{
public class FakePackage : IPackage
{
- List authors = new List();
- List owners = new List();
- Stream stream = null;
- List files = new List();
- List assemblyReferences =
- new List();
+ public Stream Stream = null;
+ public List AuthorsList = new List();
+ public List OwnersList = new List();
+ public List FilesList = new List();
public List DependenciesList =
new List();
+
+ public List AssemblyReferenceList =
+ new List();
public FakePackage()
: this(String.Empty)
@@ -49,15 +50,15 @@ namespace ICSharpCode.PackageManagement.Design
public double Rating { get; set; }
public IEnumerable AssemblyReferences {
- get { return assemblyReferences; }
+ get { return AssemblyReferenceList; }
}
public IEnumerable Authors {
- get { return authors; }
+ get { return AuthorsList; }
}
public IEnumerable Owners {
- get { return owners; }
+ get { return OwnersList; }
}
public IEnumerable Dependencies {
@@ -66,12 +67,12 @@ namespace ICSharpCode.PackageManagement.Design
public IEnumerable GetFiles()
{
- return files;
+ return FilesList;
}
public Stream GetStream()
{
- return stream;
+ return Stream;
}
public override string ToString()
@@ -81,8 +82,11 @@ namespace ICSharpCode.PackageManagement.Design
public override bool Equals(object obj)
{
- FakePackage rhs = obj as FakePackage;
- return (Id == rhs.Id) && (Version == rhs.Version);
+ IPackage rhs = obj as IPackage;
+ if (rhs != null) {
+ return (Id == rhs.Id) && (Version == rhs.Version);
+ }
+ return false;
}
public override int GetHashCode()
@@ -92,7 +96,7 @@ namespace ICSharpCode.PackageManagement.Design
public void AddAuthor(string author)
{
- authors.Add(author);
+ AuthorsList.Add(author);
}
public void AddDependency(string id, Version minVersion, Version maxVersion)
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageAssemblyReference.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageAssemblyReference.cs
new file mode 100644
index 0000000000..1e04f918e1
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageAssemblyReference.cs
@@ -0,0 +1,32 @@
+// 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.Runtime.Versioning;
+using NuGet;
+
+namespace ICSharpCode.PackageManagement.Design
+{
+ public class FakePackageAssemblyReference : IPackageAssemblyReference
+ {
+ public FrameworkName TargetFramework {
+ get {
+ throw new NotImplementedException();
+ }
+ }
+
+ public string Name { get; set; }
+
+ public string Path {
+ get {
+ throw new NotImplementedException();
+ }
+ }
+
+ public Stream GetStream()
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs
index a6f6def689..420c7c1116 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs
@@ -15,13 +15,16 @@ namespace ICSharpCode.PackageManagement
const string PackageSourcesPropertyName = "PackageSources";
const string PackageDirectoryPropertyName = "PackagesDirectory";
const string ActivePackageSourcePropertyName = "ActivePackageSource";
+ const string RecentPackagesPropertyName = "RecentPackages";
RegisteredPackageSources packageSources;
Properties properties;
+ List recentPackages;
public PackageManagementOptions(Properties properties)
{
this.properties = properties;
+ properties.Set("MyVersion", new Version(1, 0));
}
public PackageManagementOptions()
@@ -91,5 +94,20 @@ namespace ICSharpCode.PackageManagement
}
}
}
+
+ public IList RecentPackages {
+ get {
+ if (recentPackages == null) {
+ ReadRecentPackages();
+ }
+ return recentPackages;
+ }
+ }
+
+ void ReadRecentPackages()
+ {
+ var defaultRecentPackages = new List();
+ recentPackages = properties.Get>(RecentPackagesPropertyName, defaultRecentPackages);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs
index e5709a8bf3..a6d895c1b8 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs
@@ -80,9 +80,10 @@ namespace ICSharpCode.PackageManagement
}
}
- void CreateRecentPackageRepository()
+ public IPackageRepository CreateRecentPackageRepository()
{
- recentPackageRepository = new RecentPackageRepository();
+ recentPackageRepository = new RecentPackageRepository(this);
+ return recentPackageRepository;
}
public IPackageRepository ActivePackageRepository {
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/RecentPackageInfo.cs b/src/AddIns/Misc/PackageManagement/Project/Src/RecentPackageInfo.cs
new file mode 100644
index 0000000000..2476af3714
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/RecentPackageInfo.cs
@@ -0,0 +1,45 @@
+// 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 NuGet;
+
+namespace ICSharpCode.PackageManagement
+{
+ public class RecentPackageInfo
+ {
+ Version version;
+
+ public RecentPackageInfo()
+ {
+ }
+
+ public RecentPackageInfo(IPackage package)
+ : this(package.Id, package.Version)
+ {
+ }
+
+ public RecentPackageInfo(string id, Version version)
+ {
+ this.Id = id;
+ this.version = version;
+ }
+
+ public string Id { get; set; }
+
+ public string Version {
+ get { return version.ToString(); }
+ set { version = new Version(value); }
+ }
+
+ public override string ToString()
+ {
+ return String.Format("[RecentPackageInfo Id={0}, Version={1}]", Id, Version);
+ }
+
+ public bool IsMatch(IPackage package)
+ {
+ return (package.Version.ToString() == Version) && (package.Id == Id);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/RecentPackageRepository.cs b/src/AddIns/Misc/PackageManagement/Project/Src/RecentPackageRepository.cs
index a3de8b175d..e4416a4cae 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/RecentPackageRepository.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/RecentPackageRepository.cs
@@ -14,9 +14,11 @@ namespace ICSharpCode.PackageManagement
List packages = new List();
int maximumPackagesCount = DefaultMaximumPackagesCount;
+ IPackageManagementService packageManagementService;
- public RecentPackageRepository()
+ public RecentPackageRepository(IPackageManagementService packageManagementService)
{
+ this.packageManagementService = packageManagementService;
}
public string Source {
@@ -28,6 +30,7 @@ namespace ICSharpCode.PackageManagement
RemovePackageIfAlreadyAdded(package);
AddPackageAtBeginning(package);
RemoveLastPackageIfCurrentPackageCountExceedsMaximum();
+ UpdateRecentPackagesInOptions();
}
void RemovePackageIfAlreadyAdded(IPackage package)
@@ -60,15 +63,84 @@ namespace ICSharpCode.PackageManagement
packages.RemoveAt(packages.Count - 1);
}
+ void UpdateRecentPackagesInOptions()
+ {
+ IList recentPackages = packageManagementService.Options.RecentPackages;
+ recentPackages.Clear();
+ recentPackages.AddRange(GetRecentPackagesInfo());
+ }
+
+ List GetRecentPackagesInfo()
+ {
+ List allRecentPackages = new List();
+ foreach (IPackage package in packages) {
+ var recentPackageInfo = new RecentPackageInfo(package);
+ allRecentPackages.Add(recentPackageInfo);
+ }
+ return allRecentPackages;
+ }
+
public void RemovePackage(IPackage package)
{
}
public IQueryable GetPackages()
{
+ UpdatePackages();
return packages.AsQueryable();
}
+ void UpdatePackages()
+ {
+ if (!HasRecentPackagesBeenRead() && HasRecentPackages()) {
+ IEnumerable recentPackages = GetRecentPackages();
+ packages.AddRange(recentPackages);
+ }
+ }
+
+ bool HasRecentPackagesBeenRead()
+ {
+ return packages.Count > 0;
+ }
+
+ bool HasRecentPackages()
+ {
+ return packageManagementService.Options.RecentPackages.Count > 0;
+ }
+
+ IEnumerable GetRecentPackages()
+ {
+ IEnumerable recentPackages = GetRecentPackagesFilteredById();
+ return GetRecentPackagesFilteredByVersion(recentPackages);
+ }
+
+ IEnumerable GetRecentPackagesFilteredById()
+ {
+ IPackageRepository aggregrateRepository = packageManagementService.CreateAggregatePackageRepository();
+ IEnumerable recentPackageIds = GetRecentPackageIds();
+ return aggregrateRepository.FindPackages(recentPackageIds);
+ }
+
+ IEnumerable GetRecentPackageIds()
+ {
+ foreach (RecentPackageInfo recentPackageInfo in packageManagementService.Options.RecentPackages) {
+ yield return recentPackageInfo.Id;
+ }
+ }
+
+ IEnumerable GetRecentPackagesFilteredByVersion(IEnumerable recentPackages)
+ {
+ List filteredRecentPackages = new List();
+ foreach (IPackage recentPackage in recentPackages) {
+ foreach (RecentPackageInfo savedRecentPackageInfo in packageManagementService.Options.RecentPackages) {
+ if (savedRecentPackageInfo.IsMatch(recentPackage)) {
+ filteredRecentPackages.Add(recentPackage);
+ }
+ }
+ }
+ return filteredRecentPackages;
+ }
+
public int MaximumPackagesCount {
get { return maximumPackagesCount; }
set { maximumPackagesCount = value; }
diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
index 496952eecd..b35c148687 100644
--- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
+++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
@@ -87,6 +87,7 @@
+
@@ -123,6 +124,7 @@
+
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageTests.cs
index 02ab08b570..0ec8028769 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageTests.cs
@@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
+using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
using NUnit.Framework;
@@ -58,5 +59,13 @@ namespace PackageManagement.Tests
Assert.IsFalse(result);
}
+
+ [Test]
+ public void Equals_NullPassed_ReturnsFalse()
+ {
+ bool result = lhs.Equals(null);
+
+ Assert.IsFalse(result);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PackageCollectionAssert.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PackageCollectionAssert.cs
index a0e2a07334..ab6055e9ba 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PackageCollectionAssert.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PackageCollectionAssert.cs
@@ -13,7 +13,7 @@ namespace PackageManagement.Tests.Helpers
{
public static void AreEqual(IEnumerable expectedPackages, IEnumerable actualViewModels)
{
- List expectedPackagesAsList = new List(expectedPackages);
+ var expectedPackagesAsList = new List(expectedPackages);
List actualPackages = ConvertToPackageList(actualViewModels);
CollectionAssert.AreEqual(expectedPackagesAsList, actualPackages);
@@ -21,7 +21,7 @@ namespace PackageManagement.Tests.Helpers
static List ConvertToPackageList(IEnumerable viewModels)
{
- List packages = new List();
+ var packages = new List();
foreach (PackageViewModel viewModel in viewModels) {
packages.Add(viewModel.GetPackage());
}
@@ -30,10 +30,10 @@ namespace PackageManagement.Tests.Helpers
public static void AreEqual(IEnumerable expectedPackages, IEnumerable actualPackages)
{
- List expectedPackagesAsList = new List(expectedPackages);
- List actualPackagesAsList = new List(actualPackages);
+ var expectedPackagesAsList = new List(expectedPackages);
+ var actualPackagesAsList = new List(actualPackages);
- CollectionAssert.AreEqual(expectedPackagesAsList, actualPackagesAsList);
+ CollectionAssert.AreEqual(expectedPackagesAsList, actualPackagesAsList);
}
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/RecentPackageInfoCollectionAssert.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/RecentPackageInfoCollectionAssert.cs
new file mode 100644
index 0000000000..d5968e9073
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/RecentPackageInfoCollectionAssert.cs
@@ -0,0 +1,30 @@
+// 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 ICSharpCode.PackageManagement;
+using NUnit.Framework;
+
+namespace PackageManagement.Tests.Helpers
+{
+ public static class RecentPackageInfoCollectionAssert
+ {
+ public static void AreEqual(IEnumerable expectedPackages, IEnumerable actualPackages)
+ {
+ var expectedPackagesAsList = ConvertToStringList(expectedPackages);
+ var actualPackagesAsList = ConvertToStringList(actualPackages);
+
+ CollectionAssert.AreEqual(expectedPackagesAsList, actualPackagesAsList);
+ }
+
+ static List ConvertToStringList(IEnumerable expectedPackages)
+ {
+ List items = new List();
+ foreach (RecentPackageInfo recentPackage in expectedPackages) {
+ items.Add(recentPackage.ToString());
+ }
+ return items;
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs
index 451e5be79c..84637cd9df 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs
@@ -2,14 +2,16 @@
// 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
{
@@ -111,6 +113,34 @@ namespace PackageManagement.Tests
var activeSource = options.ActivePackageSource;
Assert.IsNull(activeSource);
- }
+ }
+
+ [Test]
+ public void RecentPackages_OneRecentPackageAddedAndOptionsReloadedFromSavedProperties_ContainsOneRecentPackageThatWasSavedPreviously()
+ {
+ CreateOptions();
+ var package = new FakePackage("Test");
+ var recentPackage = new RecentPackageInfo(package);
+ options.RecentPackages.Add(recentPackage);
+ CreateOptions(properties);
+
+ var recentPackages = options.RecentPackages;
+
+ var expectedRecentPackages = new RecentPackageInfo[] {
+ new RecentPackageInfo(package)
+ };
+
+ RecentPackageInfoCollectionAssert.AreEqual(expectedRecentPackages, recentPackages);
+ }
+
+ [Test]
+ public void RecentPackages_SaveRecentPackages_DoesNotThrowInvalidOperationException()
+ {
+ CreateOptions();
+ var recentPackage = new RecentPackageInfo("id", new Version(1, 0));
+ options.RecentPackages.Add(recentPackage);
+
+ Assert.DoesNotThrow(() => SaveOptions());
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/RecentPackageInfoTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/RecentPackageInfoTests.cs
new file mode 100644
index 0000000000..72621312e9
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/RecentPackageInfoTests.cs
@@ -0,0 +1,92 @@
+// 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 ICSharpCode.PackageManagement.Design;
+using NUnit.Framework;
+
+namespace PackageManagement.Tests
+{
+ [TestFixture]
+ public class RecentPackageInfoTests
+ {
+ [Test]
+ public void ToString_IdAndVersionSpecified_ContainsIdAndVersion()
+ {
+ var recentPackageInfo = new RecentPackageInfo("id", new Version("1.0"));
+
+ string actual = recentPackageInfo.ToString();
+
+ string expected = "[RecentPackageInfo Id=id, Version=1.0]";
+ Assert.AreEqual(expected, actual);
+ }
+
+ [Test]
+ public void IsMatch_PackageWithSameIdAndVersionPassed_ReturnsTrue()
+ {
+ string id = "id";
+ var version = new Version(1, 0);
+ var recentPackageInfo = new RecentPackageInfo(id, version);
+ var package = new FakePackage(id);
+ package.Version = version;
+
+ bool result = recentPackageInfo.IsMatch(package);
+
+ Assert.IsTrue(result);
+ }
+
+ [Test]
+ public void IsMatch_PackageWithSameIdButDifferentVersionPassed_ReturnsFalse()
+ {
+ string id = "id";
+ var version = new Version(1, 0);
+ var recentPackageInfo = new RecentPackageInfo(id, version);
+ var package = new FakePackage(id);
+ package.Version = new Version(2, 0);
+
+ bool result = recentPackageInfo.IsMatch(package);
+
+ Assert.IsFalse(result);
+ }
+
+ [Test]
+ public void IsMatch_PackageWithDifferentIdButSameVersionPassed_ReturnsFalse()
+ {
+ var version = new Version(1, 0);
+ var recentPackageInfo = new RecentPackageInfo("id", version);
+ var package = new FakePackage("different-id");
+ package.Version = version;
+
+ bool result = recentPackageInfo.IsMatch(package);
+
+ Assert.IsFalse(result);
+ }
+
+ [Test]
+ public void Version_SerializeThenDeserializeRecentPackageInfoInPropertiesObject_ReturnsSameValueAfterDeserialization()
+ {
+ var version = new Version(1, 0);
+ var recentPackageInfo = new RecentPackageInfo("id", version);
+ var properties = new Properties();
+ properties.Set("RecentPackageInfo", recentPackageInfo);
+
+ var xml = new StringBuilder();
+ var stringWriter = new StringWriter(xml);
+ var writer = new XmlTextWriter(stringWriter);
+ properties.Save(writer);
+
+ var stringReader = new StringReader(xml.ToString());
+ var reader = new XmlTextReader(stringReader);
+ properties = Properties.Load(reader);
+
+ var deserializedRecentPackageInfo = properties.Get("RecentPackageInfo", null);
+
+ Assert.AreEqual(recentPackageInfo.Version, deserializedRecentPackageInfo.Version);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/RecentPackageRepositoryTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/RecentPackageRepositoryTests.cs
index c1ef68db62..c9ed5db111 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/RecentPackageRepositoryTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/RecentPackageRepositoryTests.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using ICSharpCode.Core;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
using NuGet;
@@ -16,10 +17,26 @@ namespace PackageManagement.Tests
public class RecentPackageRepositoryTests
{
RecentPackageRepository repository;
+ PackageManagementOptions options;
+ FakePackageRepository aggregateRepository;
+ FakePackageManagementService packageManagementService;
void CreateRepository()
{
- repository = new RecentPackageRepository();
+ CreatePackageManagementService();
+ CreateRepository(packageManagementService);
+ }
+
+ void CreatePackageManagementService()
+ {
+ packageManagementService = new FakePackageManagementService();
+ options = packageManagementService.Options;
+ aggregateRepository = packageManagementService.FakeAggregateRepository;
+ }
+
+ void CreateRepository(IPackageManagementService packageManagementService)
+ {
+ repository = new RecentPackageRepository(packageManagementService);
}
FakePackage AddOnePackageToRepository(string id)
@@ -43,6 +60,16 @@ namespace PackageManagement.Tests
yield return AddOnePackageToRepository("Test.Package.4");
}
+ FakePackage CreateRepositoryWithOneRecentPackageSavedInOptions()
+ {
+ CreatePackageManagementService();
+ var package = new FakePackage("Test");
+ aggregateRepository.FakePackages.Add(package);
+ options.RecentPackages.Add(new RecentPackageInfo(package));
+ CreateRepository(packageManagementService);
+ return package;
+ }
+
[Test]
public void Source_NewRecentRepositoryCreated_IsRecentPackages()
{
@@ -89,7 +116,7 @@ namespace PackageManagement.Tests
var expectedPackages = packagesAdded.Reverse().Take(3);
- PackageCollectionAssert.AreEqual(expectedPackages, packages);
+ PackageCollectionAssert.AreEqual(expectedPackages, packages);
}
[Test]
@@ -107,5 +134,83 @@ namespace PackageManagement.Tests
PackageCollectionAssert.AreEqual(expectedPackages, packages);
}
+
+ [Test]
+ public void AddPackage_RepositoryIsEmptyAndOnePackageAdded_RecentPackageAddedToOptions()
+ {
+ CreateRepository();
+ var package = AddOnePackageToRepository("Test");
+
+ var recentPackages = options.RecentPackages;
+
+ var expectedPackages = new RecentPackageInfo[] {
+ new RecentPackageInfo(package)
+ };
+
+ RecentPackageInfoCollectionAssert.AreEqual(expectedPackages, recentPackages);
+ }
+
+ [Test]
+ public void AddPackage_RepositoryIsEmptyAndTwoPackagesAddedFromDifferentSources_BothRecentPackagesAddedToOptions()
+ {
+ CreateRepository();
+ var package1 = AddOnePackageToRepository("Test1");
+ var package2 = AddOnePackageToRepository("Test2");
+
+ var recentPackages = options.RecentPackages;
+
+ var expectedPackages = new RecentPackageInfo[] {
+ new RecentPackageInfo(package2),
+ new RecentPackageInfo(package1)
+ };
+
+ RecentPackageInfoCollectionAssert.AreEqual(expectedPackages, recentPackages);
+ }
+
+ [Test]
+ public void GetPackages_SavedOptionsHasOneRecentPackage_ContainsPackageTakenFromAggregateRepositoryMatchingSavedRecentPackageInfo()
+ {
+ var package = CreateRepositoryWithOneRecentPackageSavedInOptions();
+
+ var recentPackages = repository.GetPackages();
+
+ var expectedPackages = new FakePackage[] {
+ package
+ };
+
+ PackageCollectionAssert.AreEqual(expectedPackages, recentPackages);
+ }
+
+ [Test]
+ public void GetPackages_SavedOptionsHasOneRecentPackageAndGetPackagesCalledTwice_OnePackageReturned()
+ {
+ var package = CreateRepositoryWithOneRecentPackageSavedInOptions();
+
+ repository.GetPackages();
+ var recentPackages = repository.GetPackages();
+
+ var expectedPackages = new FakePackage[] {
+ package
+ };
+
+ PackageCollectionAssert.AreEqual(expectedPackages, recentPackages);
+ }
+
+ [Test]
+ public void GetPackages_OneRecentPackageAndAggregrateRepositoryHasTwoPackagesWithSameIdButDifferentVersions_OnePackageReturnedWithMatchingVersion()
+ {
+ var package1 = CreateRepositoryWithOneRecentPackageSavedInOptions();
+ var package2 = new FakePackage(package1.Id);
+ package2.Version = new Version(2, 0);
+ aggregateRepository.FakePackages.Add(package2);
+
+ var recentPackages = repository.GetPackages();
+
+ var expectedPackages = new FakePackage[] {
+ package1
+ };
+
+ PackageCollectionAssert.AreEqual(expectedPackages, recentPackages);
+ }
}
}
diff --git a/src/Main/Core/Project/Src/Services/PropertyService/Properties.cs b/src/Main/Core/Project/Src/Services/PropertyService/Properties.cs
index b2d2a0cda3..497bcd0051 100644
--- a/src/Main/Core/Project/Src/Services/PropertyService/Properties.cs
+++ b/src/Main/Core/Project/Src/Services/PropertyService/Properties.cs
@@ -270,8 +270,14 @@ namespace ICSharpCode.Core
public void Save(string fileName)
{
- using (XmlTextWriter writer = new XmlTextWriter(fileName, Encoding.UTF8)) {
- writer.Formatting = Formatting.Indented;
+ XmlTextWriter writer = new XmlTextWriter(fileName, Encoding.UTF8);
+ writer.Formatting = Formatting.Indented;
+ Save(writer);
+ }
+
+ public void Save(XmlWriter writer)
+ {
+ using (writer) {
writer.WriteStartElement("Properties");
WriteProperties(writer);
writer.WriteEndElement();
@@ -292,7 +298,13 @@ namespace ICSharpCode.Core
if (!File.Exists(fileName)) {
return null;
}
- using (XmlTextReader reader = new XmlTextReader(fileName)) {
+ XmlTextReader reader = new XmlTextReader(fileName);
+ return Load(reader);
+ }
+
+ public static Properties Load(XmlReader reader)
+ {
+ using (reader) {
while (reader.Read()){
if (reader.IsStartElement()) {
switch (reader.LocalName) {