Browse Source

Save recent NuGet packages used in properties file.

pull/15/head
mrward 15 years ago
parent
commit
50d17bbe3a
  1. 2
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  2. 32
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs
  3. 32
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageAssemblyReference.cs
  4. 18
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs
  5. 5
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs
  6. 45
      src/AddIns/Misc/PackageManagement/Project/Src/RecentPackageInfo.cs
  7. 74
      src/AddIns/Misc/PackageManagement/Project/Src/RecentPackageRepository.cs
  8. 2
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  9. 9
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageTests.cs
  10. 8
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PackageCollectionAssert.cs
  11. 30
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/RecentPackageInfoCollectionAssert.cs
  12. 32
      src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs
  13. 92
      src/AddIns/Misc/PackageManagement/Test/Src/RecentPackageInfoTests.cs
  14. 107
      src/AddIns/Misc/PackageManagement/Test/Src/RecentPackageRepositoryTests.cs
  15. 18
      src/Main/Core/Project/Src/Services/PropertyService/Properties.cs

2
src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj

@ -77,6 +77,7 @@ @@ -77,6 +77,7 @@
<Compile Include="Src\Design\DesignTimePackagesViewModel.cs" />
<Compile Include="Src\Design\FakeFileSystem.cs" />
<Compile Include="Src\Design\FakePackage.cs" />
<Compile Include="Src\Design\FakePackageAssemblyReference.cs" />
<Compile Include="Src\Design\FakePackageManagementOutputMessagesView.cs" />
<Compile Include="Src\Design\FakePackageManagementService.cs" />
<Compile Include="Src\Design\FakePackageRepository.cs" />
@ -143,6 +144,7 @@ @@ -143,6 +144,7 @@
</Compile>
<Compile Include="Src\Pages.cs" />
<Compile Include="Src\ProjectTargetFramework.cs" />
<Compile Include="Src\RecentPackageInfo.cs" />
<Compile Include="Src\RecentPackageRepository.cs" />
<Compile Include="Src\RecentPackagesViewModel.cs" />
<Compile Include="Src\RegisteredPackageSource.cs" />

32
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs

@ -10,16 +10,17 @@ namespace ICSharpCode.PackageManagement.Design @@ -10,16 +10,17 @@ namespace ICSharpCode.PackageManagement.Design
{
public class FakePackage : IPackage
{
List<string> authors = new List<string>();
List<string> owners = new List<string>();
Stream stream = null;
List<IPackageFile> files = new List<IPackageFile>();
List<IPackageAssemblyReference> assemblyReferences =
new List<IPackageAssemblyReference>();
public Stream Stream = null;
public List<string> AuthorsList = new List<string>();
public List<string> OwnersList = new List<string>();
public List<IPackageFile> FilesList = new List<IPackageFile>();
public List<PackageDependency> DependenciesList =
new List<PackageDependency>();
public List<IPackageAssemblyReference> AssemblyReferenceList =
new List<IPackageAssemblyReference>();
public FakePackage()
: this(String.Empty)
{
@ -49,15 +50,15 @@ namespace ICSharpCode.PackageManagement.Design @@ -49,15 +50,15 @@ namespace ICSharpCode.PackageManagement.Design
public double Rating { get; set; }
public IEnumerable<IPackageAssemblyReference> AssemblyReferences {
get { return assemblyReferences; }
get { return AssemblyReferenceList; }
}
public IEnumerable<string> Authors {
get { return authors; }
get { return AuthorsList; }
}
public IEnumerable<string> Owners {
get { return owners; }
get { return OwnersList; }
}
public IEnumerable<PackageDependency> Dependencies {
@ -66,12 +67,12 @@ namespace ICSharpCode.PackageManagement.Design @@ -66,12 +67,12 @@ namespace ICSharpCode.PackageManagement.Design
public IEnumerable<IPackageFile> GetFiles()
{
return files;
return FilesList;
}
public Stream GetStream()
{
return stream;
return Stream;
}
public override string ToString()
@ -81,8 +82,11 @@ namespace ICSharpCode.PackageManagement.Design @@ -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 @@ -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)

32
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageAssemblyReference.cs

@ -0,0 +1,32 @@ @@ -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();
}
}
}

18
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs

@ -15,13 +15,16 @@ namespace ICSharpCode.PackageManagement @@ -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<RecentPackageInfo> recentPackages;
public PackageManagementOptions(Properties properties)
{
this.properties = properties;
properties.Set<Version>("MyVersion", new Version(1, 0));
}
public PackageManagementOptions()
@ -91,5 +94,20 @@ namespace ICSharpCode.PackageManagement @@ -91,5 +94,20 @@ namespace ICSharpCode.PackageManagement
}
}
}
public IList<RecentPackageInfo> RecentPackages {
get {
if (recentPackages == null) {
ReadRecentPackages();
}
return recentPackages;
}
}
void ReadRecentPackages()
{
var defaultRecentPackages = new List<RecentPackageInfo>();
recentPackages = properties.Get<List<RecentPackageInfo>>(RecentPackagesPropertyName, defaultRecentPackages);
}
}
}

5
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs

@ -80,9 +80,10 @@ namespace ICSharpCode.PackageManagement @@ -80,9 +80,10 @@ namespace ICSharpCode.PackageManagement
}
}
void CreateRecentPackageRepository()
public IPackageRepository CreateRecentPackageRepository()
{
recentPackageRepository = new RecentPackageRepository();
recentPackageRepository = new RecentPackageRepository(this);
return recentPackageRepository;
}
public IPackageRepository ActivePackageRepository {

45
src/AddIns/Misc/PackageManagement/Project/Src/RecentPackageInfo.cs

@ -0,0 +1,45 @@ @@ -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);
}
}
}

74
src/AddIns/Misc/PackageManagement/Project/Src/RecentPackageRepository.cs

@ -14,9 +14,11 @@ namespace ICSharpCode.PackageManagement @@ -14,9 +14,11 @@ namespace ICSharpCode.PackageManagement
List<IPackage> packages = new List<IPackage>();
int maximumPackagesCount = DefaultMaximumPackagesCount;
IPackageManagementService packageManagementService;
public RecentPackageRepository()
public RecentPackageRepository(IPackageManagementService packageManagementService)
{
this.packageManagementService = packageManagementService;
}
public string Source {
@ -28,6 +30,7 @@ namespace ICSharpCode.PackageManagement @@ -28,6 +30,7 @@ namespace ICSharpCode.PackageManagement
RemovePackageIfAlreadyAdded(package);
AddPackageAtBeginning(package);
RemoveLastPackageIfCurrentPackageCountExceedsMaximum();
UpdateRecentPackagesInOptions();
}
void RemovePackageIfAlreadyAdded(IPackage package)
@ -60,15 +63,84 @@ namespace ICSharpCode.PackageManagement @@ -60,15 +63,84 @@ namespace ICSharpCode.PackageManagement
packages.RemoveAt(packages.Count - 1);
}
void UpdateRecentPackagesInOptions()
{
IList<RecentPackageInfo> recentPackages = packageManagementService.Options.RecentPackages;
recentPackages.Clear();
recentPackages.AddRange(GetRecentPackagesInfo());
}
List<RecentPackageInfo> GetRecentPackagesInfo()
{
List<RecentPackageInfo> allRecentPackages = new List<RecentPackageInfo>();
foreach (IPackage package in packages) {
var recentPackageInfo = new RecentPackageInfo(package);
allRecentPackages.Add(recentPackageInfo);
}
return allRecentPackages;
}
public void RemovePackage(IPackage package)
{
}
public IQueryable<IPackage> GetPackages()
{
UpdatePackages();
return packages.AsQueryable();
}
void UpdatePackages()
{
if (!HasRecentPackagesBeenRead() && HasRecentPackages()) {
IEnumerable<IPackage> recentPackages = GetRecentPackages();
packages.AddRange(recentPackages);
}
}
bool HasRecentPackagesBeenRead()
{
return packages.Count > 0;
}
bool HasRecentPackages()
{
return packageManagementService.Options.RecentPackages.Count > 0;
}
IEnumerable<IPackage> GetRecentPackages()
{
IEnumerable<IPackage> recentPackages = GetRecentPackagesFilteredById();
return GetRecentPackagesFilteredByVersion(recentPackages);
}
IEnumerable<IPackage> GetRecentPackagesFilteredById()
{
IPackageRepository aggregrateRepository = packageManagementService.CreateAggregatePackageRepository();
IEnumerable<string> recentPackageIds = GetRecentPackageIds();
return aggregrateRepository.FindPackages(recentPackageIds);
}
IEnumerable<string> GetRecentPackageIds()
{
foreach (RecentPackageInfo recentPackageInfo in packageManagementService.Options.RecentPackages) {
yield return recentPackageInfo.Id;
}
}
IEnumerable<IPackage> GetRecentPackagesFilteredByVersion(IEnumerable<IPackage> recentPackages)
{
List<IPackage> filteredRecentPackages = new List<IPackage>();
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; }

2
src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj

@ -87,6 +87,7 @@ @@ -87,6 +87,7 @@
<Compile Include="Src\Helpers\PackageCollectionAssert.cs" />
<Compile Include="Src\Helpers\PackageSourceCollectionAssert.cs" />
<Compile Include="Src\Helpers\PageCollectionAssert.cs" />
<Compile Include="Src\Helpers\RecentPackageInfoCollectionAssert.cs" />
<Compile Include="Src\Helpers\ReferenceAndProjectName.cs" />
<Compile Include="Src\Helpers\ReferenceProjectItemAssert.cs" />
<Compile Include="Src\Helpers\TestablePackagesViewModel.cs" />
@ -123,6 +124,7 @@ @@ -123,6 +124,7 @@
<Compile Include="Src\PackageUpdatesViewModelTests.cs" />
<Compile Include="Src\PackageViewModelTests.cs" />
<Compile Include="Src\PagesTests.cs" />
<Compile Include="Src\RecentPackageInfoTests.cs" />
<Compile Include="Src\RecentPackageRepositoryTests.cs" />
<Compile Include="Src\RecentPackagesViewModelTests.cs" />
<Compile Include="Src\RegisteredPackageSourcesTests.cs" />

9
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageTests.cs

@ -2,6 +2,7 @@ @@ -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 @@ -58,5 +59,13 @@ namespace PackageManagement.Tests
Assert.IsFalse(result);
}
[Test]
public void Equals_NullPassed_ReturnsFalse()
{
bool result = lhs.Equals(null);
Assert.IsFalse(result);
}
}
}

8
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PackageCollectionAssert.cs

@ -13,7 +13,7 @@ namespace PackageManagement.Tests.Helpers @@ -13,7 +13,7 @@ namespace PackageManagement.Tests.Helpers
{
public static void AreEqual(IEnumerable<IPackage> expectedPackages, IEnumerable<PackageViewModel> actualViewModels)
{
List<IPackage> expectedPackagesAsList = new List<IPackage>(expectedPackages);
var expectedPackagesAsList = new List<IPackage>(expectedPackages);
List<IPackage> actualPackages = ConvertToPackageList(actualViewModels);
CollectionAssert.AreEqual(expectedPackagesAsList, actualPackages);
@ -21,7 +21,7 @@ namespace PackageManagement.Tests.Helpers @@ -21,7 +21,7 @@ namespace PackageManagement.Tests.Helpers
static List<IPackage> ConvertToPackageList(IEnumerable<PackageViewModel> viewModels)
{
List<IPackage> packages = new List<IPackage>();
var packages = new List<IPackage>();
foreach (PackageViewModel viewModel in viewModels) {
packages.Add(viewModel.GetPackage());
}
@ -30,8 +30,8 @@ namespace PackageManagement.Tests.Helpers @@ -30,8 +30,8 @@ namespace PackageManagement.Tests.Helpers
public static void AreEqual(IEnumerable<IPackage> expectedPackages, IEnumerable<IPackage> actualPackages)
{
List<IPackage> expectedPackagesAsList = new List<IPackage>(expectedPackages);
List<IPackage> actualPackagesAsList = new List<IPackage>(actualPackages);
var expectedPackagesAsList = new List<IPackage>(expectedPackages);
var actualPackagesAsList = new List<IPackage>(actualPackages);
CollectionAssert.AreEqual(expectedPackagesAsList, actualPackagesAsList);
}

30
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/RecentPackageInfoCollectionAssert.cs

@ -0,0 +1,30 @@ @@ -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<RecentPackageInfo> expectedPackages, IEnumerable<RecentPackageInfo> actualPackages)
{
var expectedPackagesAsList = ConvertToStringList(expectedPackages);
var actualPackagesAsList = ConvertToStringList(actualPackages);
CollectionAssert.AreEqual(expectedPackagesAsList, actualPackagesAsList);
}
static List<string> ConvertToStringList(IEnumerable<RecentPackageInfo> expectedPackages)
{
List<string> items = new List<string>();
foreach (RecentPackageInfo recentPackage in expectedPackages) {
items.Add(recentPackage.ToString());
}
return items;
}
}
}

32
src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs

@ -2,14 +2,16 @@ @@ -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
{
@ -112,5 +114,33 @@ namespace PackageManagement.Tests @@ -112,5 +114,33 @@ namespace PackageManagement.Tests
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());
}
}
}

92
src/AddIns/Misc/PackageManagement/Test/Src/RecentPackageInfoTests.cs

@ -0,0 +1,92 @@ @@ -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", 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>("RecentPackageInfo", null);
Assert.AreEqual(recentPackageInfo.Version, deserializedRecentPackageInfo.Version);
}
}
}

107
src/AddIns/Misc/PackageManagement/Test/Src/RecentPackageRepositoryTests.cs

@ -4,6 +4,7 @@ @@ -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 @@ -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 @@ -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()
{
@ -107,5 +134,83 @@ namespace PackageManagement.Tests @@ -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);
}
}
}

18
src/Main/Core/Project/Src/Services/PropertyService/Properties.cs

@ -270,8 +270,14 @@ namespace ICSharpCode.Core @@ -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 @@ -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) {

Loading…
Cancel
Save