From 541b51f6d3e4bccb5cf9b315da4549ba76c95bf4 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Mon, 8 Jul 2013 19:20:36 +0100 Subject: [PATCH 1/5] Fix PInvoke sample. --- samples/PInvokeAddIn/Project/PInvoke.nuspec | 3 ++- samples/PInvokeAddIn/Project/Src/PInvokeCodeGenerator.cs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/samples/PInvokeAddIn/Project/PInvoke.nuspec b/samples/PInvokeAddIn/Project/PInvoke.nuspec index 21425078d8..8bc2b1955b 100644 --- a/samples/PInvokeAddIn/Project/PInvoke.nuspec +++ b/samples/PInvokeAddIn/Project/PInvoke.nuspec @@ -2,11 +2,12 @@ PInvoke - 0.2 + 0.3 Matt Ward SharpDevelop false PInvoke.Net integration for SharpDevelop. + http://community.sharpdevelop.net/blogs/mattward/SharpDevelop.png PInvoke.Net integration for SharpDevelop. en-US diff --git a/samples/PInvokeAddIn/Project/Src/PInvokeCodeGenerator.cs b/samples/PInvokeAddIn/Project/Src/PInvokeCodeGenerator.cs index 0d66f91909..be9591b237 100644 --- a/samples/PInvokeAddIn/Project/Src/PInvokeCodeGenerator.cs +++ b/samples/PInvokeAddIn/Project/Src/PInvokeCodeGenerator.cs @@ -21,7 +21,7 @@ namespace ICSharpCode.PInvokeAddIn { using (editor.Document.OpenUndoGroup()) { int startLine = editor.Document.GetLineByOffset(editor.SelectionStart).LineNumber; - editor.SelectedText = DocumentUtilitites.NormalizeNewLines(signature, editor.Document, startLine); + editor.SelectedText = DocumentUtilities.NormalizeNewLines(signature, editor.Document, startLine); int endLine = editor.Document.GetLineByOffset(editor.SelectionStart + editor.SelectionLength).LineNumber; editor.Language.FormattingStrategy.IndentLines(editor, startLine, endLine); } From f6649b343b4a45da23b2cc58c6ddc0ae4f1b44a2 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Mon, 8 Jul 2013 19:44:07 +0100 Subject: [PATCH 2/5] Only show latest version of addin from online gallery. --- .../Project/Src/ViewModel/AvailableAddInsViewModel.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs index 9a371d20b5..731dfc3334 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs @@ -44,7 +44,8 @@ namespace ICSharpCode.AddInManager2.ViewModel protected override IQueryable GetAllPackages() { - return (ActiveRepository ?? AddInManager.Repositories.AllRegistered).GetPackages(); + return (ActiveRepository ?? AddInManager.Repositories.AllRegistered).GetPackages() + .Where(package => package.IsLatestVersion); } protected override IEnumerable GetFilteredPackagesBeforePagingResults(IQueryable allPackages) From 1e291212521a0a0645862ec73d2d1b4f03675e78 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Mon, 8 Jul 2013 20:18:44 +0100 Subject: [PATCH 3/5] Revert "Only show latest version of addin from online gallery." This reverts commit f6649b343b4a45da23b2cc58c6ddc0ae4f1b44a2. --- .../Project/Src/ViewModel/AvailableAddInsViewModel.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs index 731dfc3334..9a371d20b5 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs @@ -44,8 +44,7 @@ namespace ICSharpCode.AddInManager2.ViewModel protected override IQueryable GetAllPackages() { - return (ActiveRepository ?? AddInManager.Repositories.AllRegistered).GetPackages() - .Where(package => package.IsLatestVersion); + return (ActiveRepository ?? AddInManager.Repositories.AllRegistered).GetPackages(); } protected override IEnumerable GetFilteredPackagesBeforePagingResults(IQueryable allPackages) From 54811a1329a6cac69716fca35f93b6e4287f4288 Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Tue, 9 Jul 2013 23:38:36 +0200 Subject: [PATCH 4/5] Fix: Under certain circumstances multiple releases of a package are shown in list of available packages. --- .../AvailableAddInsViewModelTests.cs | 64 ++++++++++++++++++- .../AddInManager2.Tests/Fakes/FakePackage.cs | 5 ++ .../Src/ViewModel/AvailableAddInsViewModel.cs | 9 +-- .../Src/ViewModel/NuGetAddInsViewModelBase.cs | 2 +- 4 files changed, 71 insertions(+), 9 deletions(-) diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs index 3604ef6a96..d2df883eff 100644 --- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs @@ -272,6 +272,68 @@ namespace ICSharpCode.AddInManager2.Tests Assert.That(firstAddIn.Version, Is.EqualTo(_addIn2.Version), "Version of 1st AddIn"); } + [Test] + public void SearchInstallableAddInsWithMultipleReleasesAndDownloadCountSorting() + { + CreateAddIns(); + _addIn1.Enabled = true; + + // Package to be shown in repository + FakePackage fakePackage2 = new FakePackage() + { + Id = _addIn2.Manifest.PrimaryIdentity, + Version = new SemanticVersion(_addIn2.Version), + Tags = SharpDevelopAddInTag + }; + FakePackage fakePackage1 = new FakePackage() + { + Id = _addIn1.Manifest.PrimaryIdentity, + Version = new SemanticVersion(_addIn1.Version), + Tags = SharpDevelopAddInTag, + DownloadCount = 10 + }; + FakePackage fakePackage2_new = new FakePackage() + { + Id = _addIn2_new.Manifest.PrimaryIdentity, + Version = new SemanticVersion(_addIn2_new.Version), + Tags = SharpDevelopAddInTag, + DownloadCount = 20 + }; + + // List of NuGet repositories + List registeredPackageSources = new List(); + registeredPackageSources.Add(new PackageSource("", "Test Repository")); + _services.FakeRepositories.RegisteredPackageSources = registeredPackageSources; + + List registeredPackageRepositories = new List(); + FakeCorePackageRepository remoteRepository = new FakeCorePackageRepository(); + remoteRepository.Source = registeredPackageSources[0].Source; + remoteRepository.ReturnedPackages = (new IPackage[] { fakePackage2, fakePackage1, fakePackage2_new }).AsQueryable(); + _services.FakeRepositories.RegisteredPackageRepositories = registeredPackageRepositories; + + // PackageRepository service should return remoteRepository instance + _services.FakeRepositories.GetRepositoryFromSourceCallback = delegate(PackageSource packageSource) + { + return remoteRepository; + }; + + FakeCorePackageRepository localRepository = new FakeCorePackageRepository(); + _services.FakeNuGet.FakeCorePackageManager.LocalRepository = localRepository; + localRepository.ReturnedPackages = (new IPackage[] { }).AsQueryable(); + + var viewModel = new AvailableAddInsViewModel(_services); + viewModel.ReadPackagesAndWaitForUpdate(); + + // There must be only 2 packages in list, because user should see only latest releases + Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(2), "AddIn list must contain 2 items."); + + // fakePackage2_new is the first one, because it has a greater download count + AddInPackageViewModelBase firstAddIn = viewModel.AddInPackages[0]; + Assert.That(firstAddIn.Id, Is.EqualTo(_addIn2_new.Manifest.PrimaryIdentity), "Primary identity of 1st AddIn"); + Assert.That(firstAddIn.Name, Is.EqualTo(_addIn2_new.Manifest.PrimaryIdentity), "Name of 1st AddIn"); + Assert.That(firstAddIn.Version, Is.EqualTo(_addIn2_new.Version), "Version of 1st AddIn"); + } + // [Test] // public void FilteringOutNonSharpDevelopPackages() // { @@ -335,7 +397,7 @@ namespace ICSharpCode.AddInManager2.Tests { fakePackages[i] = new FakePackage() { - Id = _addIn1.Manifest.PrimaryIdentity + i.ToString(), + Id = _addIn1.Manifest.PrimaryIdentity + i.ToString("00"), Version = new SemanticVersion(_addIn1.Version), Tags = SharpDevelopAddInTag }; diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs index 5557c651d7..61490833d5 100644 --- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs @@ -182,5 +182,10 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes throw new NotImplementedException(); } } + + public override string ToString() + { + return string.Format("[FakePackage Id={0}, Version={1}]", Id, Version); + } } } diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs index 9a371d20b5..ff0ce5c5ac 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs @@ -50,13 +50,8 @@ namespace ICSharpCode.AddInManager2.ViewModel protected override IEnumerable GetFilteredPackagesBeforePagingResults(IQueryable allPackages) { return base.GetFilteredPackagesBeforePagingResults(allPackages) - .Where(package => package.IsReleaseVersion()) - .DistinctLast(PackageEqualityComparer.Id); - } - - protected override IQueryable OrderPackages(IQueryable packages) - { - return packages.OrderByDescending(package => package.DownloadCount); + .OrderByDescending(package => package.DownloadCount) + .ThenBy(package => package.Id); } protected override void UpdatePrereleaseFilter() diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs index 0682d62999..37d0d605ae 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs @@ -143,7 +143,7 @@ namespace ICSharpCode.AddInManager2.ViewModel return _allPackages; } - protected virtual IQueryable OrderPackages(IQueryable packages) + private IQueryable OrderPackages(IQueryable packages) { return packages .OrderBy(package => package.Id); From 13de1ecd9a5d94f792898c61adb8bae7975f8991 Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Wed, 10 Jul 2013 00:14:20 +0200 Subject: [PATCH 5/5] Fix: List of available AddIns might show an older instead of most recent release of a package. --- .../AvailableAddInsViewModelTests.cs | 25 ++++++++++--------- .../Src/ViewModel/NuGetAddInsViewModelBase.cs | 3 ++- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs index d2df883eff..6f914666de 100644 --- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs @@ -225,7 +225,7 @@ namespace ICSharpCode.AddInManager2.Tests CreateAddIns(); _addIn1.Enabled = true; - // Package to be shown in repository + // Packages to be shown in repository FakePackage fakePackage1 = new FakePackage() { Id = _addIn1.Manifest.PrimaryIdentity, @@ -278,12 +278,14 @@ namespace ICSharpCode.AddInManager2.Tests CreateAddIns(); _addIn1.Enabled = true; - // Package to be shown in repository - FakePackage fakePackage2 = new FakePackage() + // Packages to be shown in repository + // To test correct sorting we let the newer release of addIn2 appear before the older one. + FakePackage fakePackage2_new = new FakePackage() { - Id = _addIn2.Manifest.PrimaryIdentity, - Version = new SemanticVersion(_addIn2.Version), - Tags = SharpDevelopAddInTag + Id = _addIn2_new.Manifest.PrimaryIdentity, + Version = new SemanticVersion(_addIn2_new.Version), + Tags = SharpDevelopAddInTag, + DownloadCount = 30 }; FakePackage fakePackage1 = new FakePackage() { @@ -292,12 +294,11 @@ namespace ICSharpCode.AddInManager2.Tests Tags = SharpDevelopAddInTag, DownloadCount = 10 }; - FakePackage fakePackage2_new = new FakePackage() + FakePackage fakePackage2 = new FakePackage() { - Id = _addIn2_new.Manifest.PrimaryIdentity, - Version = new SemanticVersion(_addIn2_new.Version), - Tags = SharpDevelopAddInTag, - DownloadCount = 20 + Id = _addIn2.Manifest.PrimaryIdentity, + Version = new SemanticVersion(_addIn2.Version), + Tags = SharpDevelopAddInTag }; // List of NuGet repositories @@ -308,7 +309,7 @@ namespace ICSharpCode.AddInManager2.Tests List registeredPackageRepositories = new List(); FakeCorePackageRepository remoteRepository = new FakeCorePackageRepository(); remoteRepository.Source = registeredPackageSources[0].Source; - remoteRepository.ReturnedPackages = (new IPackage[] { fakePackage2, fakePackage1, fakePackage2_new }).AsQueryable(); + remoteRepository.ReturnedPackages = (new IPackage[] { fakePackage2_new, fakePackage1, fakePackage2 }).AsQueryable(); _services.FakeRepositories.RegisteredPackageRepositories = registeredPackageRepositories; // PackageRepository service should return remoteRepository instance diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs index 37d0d605ae..2a549a9932 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs @@ -146,7 +146,8 @@ namespace ICSharpCode.AddInManager2.ViewModel private IQueryable OrderPackages(IQueryable packages) { return packages - .OrderBy(package => package.Id); + .OrderBy(package => package.Id) + .ThenBy(package => package.Version); } private IQueryable FilterPackagesBySearchCriteria(IQueryable packages)