Browse Source

Merge branch 'master' of github.com:icsharpcode/SharpDevelop

pull/505/merge
Peter Forstmeier 11 years ago
parent
commit
2fae041d9d
  1. 49
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/EditorScript.cs
  2. 35
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/InsertionCursorLayer.cs
  3. 2
      src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetPackageCmdlet.cs
  4. 4
      src/AddIns/Misc/PackageManagement/PackageManagement.sln
  5. 9
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs
  6. 2
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProject.cs
  7. 10
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs
  8. 8
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSelectedProjects.cs
  9. 9
      src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs
  10. 21
      src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackages.cs
  11. 2
      src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackagesViewModel.cs
  12. 1
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  13. 39
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageRepositoryWithConstraintProvider.cs
  14. 22
      src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementProjectTests.cs
  15. 23
      src/AddIns/Misc/PackageManagement/Test/Src/UpdatePackageActionTests.cs
  16. 41
      src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackagesTests.cs
  17. 27
      src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackagesViewModelTests.cs

49
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/EditorScript.cs

@ -18,6 +18,7 @@ @@ -18,6 +18,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Threading;
@ -132,21 +133,21 @@ namespace CSharpBinding.Refactoring @@ -132,21 +133,21 @@ namespace CSharpBinding.Refactoring
switch (defaultPosition) {
case InsertPosition.Start:
layer.CurrentInsertionPoint = 0;
layer.CurrentInsertionPointIndex = 0;
break;
case InsertPosition.End:
layer.CurrentInsertionPoint = insertionPoints.Count - 1;
layer.CurrentInsertionPointIndex = insertionPoints.Count - 1;
break;
case InsertPosition.Before:
for (int i = 0; i < insertionPoints.Count; i++) {
if (insertionPoints[i].Location < loc)
layer.CurrentInsertionPoint = i;
layer.CurrentInsertionPointIndex = i;
}
break;
case InsertPosition.After:
for (int i = 0; i < insertionPoints.Count; i++) {
if (insertionPoints[i].Location > loc) {
layer.CurrentInsertionPoint = i;
layer.CurrentInsertionPointIndex = i;
break;
}
}
@ -172,13 +173,34 @@ namespace CSharpBinding.Refactoring @@ -172,13 +173,34 @@ namespace CSharpBinding.Refactoring
args.InsertionPoint.LineBefore == NewLineInsertion.None && nodes.Count > 1) {
args.InsertionPoint.LineAfter = NewLineInsertion.BlankLine;
}
var insertionPoint = args.InsertionPoint;
if (nodes.All(n => n is EnumMemberDeclaration)) {
insertionPoint.LineAfter = NewLineInsertion.Eol;
insertionPoint.LineBefore = NewLineInsertion.None;
}
int offset = currentScript.GetCurrentOffset(args.InsertionPoint.Location);
int indentLevel = currentScript.GetIndentLevelAt(offset);
int offset = currentScript.GetCurrentOffset(insertionPoint.Location);
int indentLevel = currentScript.GetIndentLevelAt(Math.Max(0, offset - 1));
foreach (var node in nodes.Reverse()) {
var output = currentScript.OutputNode(indentLevel, node);
int delta = args.InsertionPoint.Insert(target, output.Text);
var text = output.Text;
if (node is EnumMemberDeclaration) {
if (insertionPoint != layer.InsertionPoints.Last()) {
text += ",";
} else {
var parentEnum = currentScript.context.RootNode.GetNodeAt(insertionPoint.Location, n => (n is TypeDeclaration) && ((TypeDeclaration)n).ClassType == ClassType.Enum) as TypeDeclaration;
if (parentEnum != null) {
var lastMember = parentEnum.Members.LastOrDefault();
if (lastMember != null) {
var segment = currentScript.GetSegment(lastMember);
currentScript.InsertText(segment.EndOffset, ",");
}
}
}
}
int delta = insertionPoint.Insert(target, text);
output.RegisterTrackedSegments(currentScript, delta + offset);
}
currentScript.FormatText(nodes);
@ -239,19 +261,6 @@ namespace CSharpBinding.Refactoring @@ -239,19 +261,6 @@ namespace CSharpBinding.Refactoring
var layer = new InsertionCursorLayer(area, operation, insertionPoints);
area.Dispatcher.BeginInvoke(DispatcherPriority.Background, (Action)area.TextView.InvalidateVisual);
if (declaringType.Kind == TypeKind.Enum) {
foreach (var node in nodes.Reverse()) {
int indentLevel = GetIndentLevelAt(area.Document.GetOffset(declaringType.BodyRegion.Begin));
var output = OutputNode(indentLevel, node);
var point = insertionPoints[0];
var offset = area.Document.GetOffset(point.Location);
var text = output.Text + ",";
var delta = point.Insert(area.Document, text);
output.RegisterTrackedSegments(script, delta + offset);
}
tcs.SetResult(script);
return tcs.Task;
}
InsertWithCursorOnLayer(script, layer, tcs, nodes, area.Document);
return tcs.Task;
}

35
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/InsertionCursorLayer.cs

@ -24,6 +24,7 @@ using System.Windows.Controls; @@ -24,6 +24,7 @@ using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using ICSharpCode.AvalonEdit;
using ICSharpCode.AvalonEdit.Editing;
using ICSharpCode.AvalonEdit.Rendering;
@ -31,6 +32,7 @@ using ICSharpCode.AvalonEdit.Utils; @@ -31,6 +32,7 @@ using ICSharpCode.AvalonEdit.Utils;
using ICSharpCode.NRefactory;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
namespace CSharpBinding.Refactoring
{
class InsertionCursorLayer : Canvas, IDisposable
@ -41,9 +43,10 @@ namespace CSharpBinding.Refactoring @@ -41,9 +43,10 @@ namespace CSharpBinding.Refactoring
readonly TextArea editor;
public int CurrentInsertionPoint {
get;
set;
public int CurrentInsertionPointIndex { get; set; }
public InsertionPoint[] InsertionPoints {
get { return insertionPoints; }
}
int insertionPointNextToMouse = -1;
@ -73,8 +76,8 @@ namespace CSharpBinding.Refactoring @@ -73,8 +76,8 @@ namespace CSharpBinding.Refactoring
protected override void OnRender(DrawingContext drawingContext)
{
DrawLineForInsertionPoint(CurrentInsertionPoint, markerPen, drawingContext);
if (insertionPointNextToMouse > -1 && insertionPointNextToMouse != CurrentInsertionPoint)
DrawLineForInsertionPoint(CurrentInsertionPointIndex, markerPen, drawingContext);
if (insertionPointNextToMouse > -1 && insertionPointNextToMouse != CurrentInsertionPointIndex)
DrawLineForInsertionPoint(insertionPointNextToMouse, tempMarkerPen, drawingContext);
SetGroupBoxPosition();
// HACK: why OnRender() override? we could just use Line objects instead
@ -128,7 +131,7 @@ namespace CSharpBinding.Refactoring @@ -128,7 +131,7 @@ namespace CSharpBinding.Refactoring
else {
insertionPointNextToMouse = FindNextInsertionPoint(e.GetPosition(this));
if (insertionPointNextToMouse >= 0)
CurrentInsertionPoint = insertionPointNextToMouse;
CurrentInsertionPointIndex = insertionPointNextToMouse;
InvalidateVisual();
}
e.Handled = true;
@ -181,9 +184,9 @@ namespace CSharpBinding.Refactoring @@ -181,9 +184,9 @@ namespace CSharpBinding.Refactoring
{
return (sender, e) => {
if (up)
layer.CurrentInsertionPoint = Math.Max(0, layer.CurrentInsertionPoint - 1);
layer.CurrentInsertionPointIndex = Math.Max(0, layer.CurrentInsertionPointIndex - 1);
else
layer.CurrentInsertionPoint = Math.Min(layer.insertionPoints.Length - 1, layer.CurrentInsertionPoint + 1);
layer.CurrentInsertionPointIndex = Math.Min(layer.insertionPoints.Length - 1, layer.CurrentInsertionPointIndex + 1);
layer.InvalidateVisual();
layer.ScrollToInsertionPoint();
};
@ -192,9 +195,9 @@ namespace CSharpBinding.Refactoring @@ -192,9 +195,9 @@ namespace CSharpBinding.Refactoring
ExecutedRoutedEventHandler MoveMarkerPage(bool up)
{
return (sender, e) => {
TextLocation current = layer.insertionPoints[layer.CurrentInsertionPoint].Location;
TextLocation current = layer.insertionPoints[layer.CurrentInsertionPointIndex].Location;
double currentVPos = layer.editor.TextView.GetVisualTopByDocumentLine(current.Line);
int newIndex = layer.CurrentInsertionPoint;
int newIndex = layer.CurrentInsertionPointIndex;
double newVPos;
do {
if (up) {
@ -214,7 +217,7 @@ namespace CSharpBinding.Refactoring @@ -214,7 +217,7 @@ namespace CSharpBinding.Refactoring
newVPos = layer.editor.TextView.GetVisualTopByDocumentLine(layer.insertionPoints[newIndex].Location.Line);
}
while (Math.Abs(currentVPos - newVPos) < layer.editor.ActualHeight);
layer.CurrentInsertionPoint = newIndex;
layer.CurrentInsertionPointIndex = newIndex;
layer.InvalidateVisual();
layer.ScrollToInsertionPoint();
};
@ -224,9 +227,9 @@ namespace CSharpBinding.Refactoring @@ -224,9 +227,9 @@ namespace CSharpBinding.Refactoring
{
return (sender, e) => {
if (up)
layer.CurrentInsertionPoint = 0;
layer.CurrentInsertionPointIndex = 0;
else
layer.CurrentInsertionPoint = layer.insertionPoints.Length - 1;
layer.CurrentInsertionPointIndex = layer.insertionPoints.Length - 1;
layer.InvalidateVisual();
layer.ScrollToInsertionPoint();
};
@ -247,14 +250,14 @@ namespace CSharpBinding.Refactoring @@ -247,14 +250,14 @@ namespace CSharpBinding.Refactoring
internal void ScrollToInsertionPoint()
{
var location = insertionPoints[CurrentInsertionPoint].Location;
var location = insertionPoints[CurrentInsertionPointIndex].Location;
editor.GetService<TextEditor>().ScrollTo(location.Line, location.Column);
SetGroupBoxPosition();
}
void SetGroupBoxPosition()
{
var boxPosition = GetLinePosition(CurrentInsertionPoint) + new Vector(editor.TextView.ActualWidth * 0.6 - 5, -groupBox.ActualHeight / 2.0);
var boxPosition = GetLinePosition(CurrentInsertionPointIndex) + new Vector(editor.TextView.ActualWidth * 0.6 - 5, -groupBox.ActualHeight / 2.0);
Canvas.SetTop(groupBox, boxPosition.Y);
Canvas.SetLeft(groupBox, boxPosition.X);
}
@ -267,7 +270,7 @@ namespace CSharpBinding.Refactoring @@ -267,7 +270,7 @@ namespace CSharpBinding.Refactoring
void FireExited(bool success)
{
if (Exited != null) {
Exited(this, new InsertionCursorEventArgs(insertionPoints[CurrentInsertionPoint], success));
Exited(this, new InsertionCursorEventArgs(insertionPoints[CurrentInsertionPointIndex], success));
}
}

2
src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetPackageCmdlet.cs

@ -200,7 +200,7 @@ namespace ICSharpCode.PackageManagement.Cmdlets @@ -200,7 +200,7 @@ namespace ICSharpCode.PackageManagement.Cmdlets
if (project != null) {
return new UpdatedPackages(project, repository);
}
return new UpdatedPackages(GetPackagesInstalledIntoAnyProject(), repository);
return new UpdatedPackages(GetPackagesInstalledIntoAnyProject(), repository, NullConstraintProvider.Instance);
}
IQueryable<IPackage> GetPackagesInstalledIntoAnyProject()

4
src/AddIns/Misc/PackageManagement/PackageManagement.sln

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
# SharpDevelop 4.3
# SharpDevelop 4.4
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManagement", "Project\PackageManagement.csproj", "{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManagement.Tests", "Test\PackageManagement.Tests.csproj", "{56E98A01-8398-4A08-9578-C7337711A52B}"
@ -85,7 +85,7 @@ Global @@ -85,7 +85,7 @@ Global
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|Any CPU.ActiveCfg = Debug|WithNRefactory
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|Any CPU.Build.0 = Release|Any CPU
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|Any CPU.Build.0 = Release|Any CPU

9
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs

@ -39,6 +39,8 @@ namespace ICSharpCode.PackageManagement.Design @@ -39,6 +39,8 @@ namespace ICSharpCode.PackageManagement.Design
FakeUninstallPackageAction = new FakeUninstallPackageAction(this);
this.Name = name;
ConstraintProvider = NullConstraintProvider.Instance;
}
private FakeInstallPackageAction FakeInstallPackageAction;
@ -232,6 +234,11 @@ namespace ICSharpCode.PackageManagement.Design @@ -232,6 +234,11 @@ namespace ICSharpCode.PackageManagement.Design
FakeSourceRepository.AddFakePackage(packageId);
}
public FakePackage AddFakePackageToSourceRepository(string packageId, string version)
{
return FakeSourceRepository.AddFakePackageWithVersion(packageId, version);
}
public void UpdatePackages(UpdatePackagesAction action)
{
}
@ -274,5 +281,7 @@ namespace ICSharpCode.PackageManagement.Design @@ -274,5 +281,7 @@ namespace ICSharpCode.PackageManagement.Design
{
throw new NotImplementedException();
}
public IPackageConstraintProvider ConstraintProvider { get; set; }
}
}

2
src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProject.cs

@ -38,6 +38,8 @@ namespace ICSharpCode.PackageManagement @@ -38,6 +38,8 @@ namespace ICSharpCode.PackageManagement
Project ConvertToDTEProject();
IPackageConstraintProvider ConstraintProvider { get; }
bool IsPackageInstalled(IPackage package);
bool IsPackageInstalled(string packageId);
bool HasOlderPackageInstalled(IPackage package);

10
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs

@ -178,5 +178,15 @@ namespace ICSharpCode.PackageManagement @@ -178,5 +178,15 @@ namespace ICSharpCode.PackageManagement
{
packageManager.UpdatePackageReference(package, settings);
}
public IPackageConstraintProvider ConstraintProvider {
get {
var constraintProvider = projectManager.LocalRepository as IPackageConstraintProvider;
if (constraintProvider != null) {
return constraintProvider;
}
return NullConstraintProvider.Instance;
}
}
}
}

8
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSelectedProjects.cs

@ -157,5 +157,13 @@ namespace ICSharpCode.PackageManagement @@ -157,5 +157,13 @@ namespace ICSharpCode.PackageManagement
}
return null;
}
public IPackageConstraintProvider GetConstraintProvider(IPackageRepository repository)
{
if (HasSingleProjectSelected()) {
return GetSingleProjectSelected(repository).ConstraintProvider;
}
return NullConstraintProvider.Instance;
}
}
}

9
src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs

@ -134,9 +134,12 @@ namespace ICSharpCode.PackageManagement @@ -134,9 +134,12 @@ namespace ICSharpCode.PackageManagement
void FindPackage()
{
Package = Project
.SourceRepository
.FindPackage(PackageId, PackageVersion, AllowPrereleaseVersions, allowUnlisted: false);
Package = Project.SourceRepository.FindPackage(
PackageId,
PackageVersion,
Project.ConstraintProvider,
AllowPrereleaseVersions,
allowUnlisted: false);
}
void ThrowPackageNotFoundError(string packageId)

21
src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackages.cs

@ -29,22 +29,26 @@ namespace ICSharpCode.PackageManagement @@ -29,22 +29,26 @@ namespace ICSharpCode.PackageManagement
{
IPackageRepository sourceRepository;
IQueryable<IPackage> installedPackages;
IPackageConstraintProvider constraintProvider;
public UpdatedPackages(
IPackageManagementProject project,
IPackageRepository aggregateRepository)
: this(
project.GetPackages(),
aggregateRepository)
aggregateRepository,
project.ConstraintProvider)
{
}
public UpdatedPackages(
IQueryable<IPackage> installedPackages,
IPackageRepository aggregrateRepository)
IPackageRepository aggregrateRepository,
IPackageConstraintProvider constraintProvider)
{
this.installedPackages = installedPackages;
this.sourceRepository = aggregrateRepository;
this.constraintProvider = constraintProvider;
}
public string SearchTerms { get; set; }
@ -54,7 +58,7 @@ namespace ICSharpCode.PackageManagement @@ -54,7 +58,7 @@ namespace ICSharpCode.PackageManagement
IQueryable<IPackage> localPackages = installedPackages;
localPackages = FilterPackages(localPackages);
IEnumerable<IPackage> distinctLocalPackages = DistinctPackages(localPackages);
return GetUpdatedPackages(sourceRepository, distinctLocalPackages, includePrerelease);
return GetUpdatedPackages(distinctLocalPackages, includePrerelease);
}
IQueryable<IPackage> GetInstalledPackages()
@ -81,11 +85,18 @@ namespace ICSharpCode.PackageManagement @@ -81,11 +85,18 @@ namespace ICSharpCode.PackageManagement
}
IEnumerable<IPackage> GetUpdatedPackages(
IPackageRepository sourceRepository,
IEnumerable<IPackage> localPackages,
bool includePrelease)
{
return sourceRepository.GetUpdates(localPackages, includePrelease, false);
IEnumerable<IVersionSpec> constraints = localPackages
.Select(package => constraintProvider.GetConstraint(package.Id));
return sourceRepository.GetUpdates(
localPackages,
includePrelease,
false,
null,
constraints);
}
}
}

2
src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackagesViewModel.cs

@ -78,7 +78,7 @@ namespace ICSharpCode.PackageManagement @@ -78,7 +78,7 @@ namespace ICSharpCode.PackageManagement
try {
IPackageRepository repository = RegisteredPackageRepositories.ActiveRepository;
IQueryable<IPackage> installedPackages = GetInstalledPackages(repository);
updatedPackages = new UpdatedPackages(installedPackages, repository);
updatedPackages = new UpdatedPackages(installedPackages, repository, selectedProjects.GetConstraintProvider(repository));
} catch (Exception ex) {
errorMessage = ex.Message;
}

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

@ -111,6 +111,7 @@ @@ -111,6 +111,7 @@
<Compile Include="Src\Helpers\FakeCmdletLogger.cs" />
<Compile Include="Src\Helpers\FakeCodeGenerator.cs" />
<Compile Include="Src\Helpers\FakeOperationAwarePackageRepository.cs" />
<Compile Include="Src\Helpers\FakePackageRepositoryWithConstraintProvider.cs" />
<Compile Include="Src\Helpers\FakeSelectProjectsService.cs" />
<Compile Include="Src\Helpers\FakeServiceBasedRepository.cs" />
<Compile Include="Src\Helpers\FakeSolutionPackageRepositoryFactory.cs" />

39
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageRepositoryWithConstraintProvider.cs

@ -0,0 +1,39 @@ @@ -0,0 +1,39 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using ICSharpCode.PackageManagement.Design;
using NuGet;
namespace PackageManagement.Tests.Helpers
{
public class FakePackageRepositoryWithConstraintProvider : FakePackageRepository, IPackageConstraintProvider
{
DefaultConstraintProvider constraintProvider = new DefaultConstraintProvider();
public IVersionSpec GetConstraint(string packageId)
{
return constraintProvider.GetConstraint(packageId);
}
public void AddConstraint(string packageId, IVersionSpec versionSpec)
{
constraintProvider.AddConstraint (packageId, versionSpec);
}
}
}

22
src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementProjectTests.cs

@ -759,5 +759,27 @@ namespace PackageManagement.Tests @@ -759,5 +759,27 @@ namespace PackageManagement.Tests
Assert.AreEqual(package, fakePackageManager.PackagePassedToUpdatePackageReference);
Assert.AreEqual(updatePackagesAction, fakePackageManager.SettingsPassedToUpdatePackageReference);
}
[Test]
public void ConstraintProvider_LocalRepositoryDoesNotImplementIConstraintProvider_ReturnsNullConstraintProviderInstance ()
{
CreateProject ();
IPackageConstraintProvider provider = project.ConstraintProvider;
Assert.AreEqual (NullConstraintProvider.Instance, provider);
}
[Test]
public void ConstraintProvider_LocalRepositoryImplementsIConstraintProvider_ReturnsLocalRepository ()
{
CreateProject ();
var localRepository = new FakePackageRepositoryWithConstraintProvider ();
fakeProjectManager.FakeLocalRepository = localRepository;
IPackageConstraintProvider provider = project.ConstraintProvider;
Assert.AreEqual (localRepository, provider);
}
}
}

23
src/AddIns/Misc/PackageManagement/Test/Src/UpdatePackageActionTests.cs

@ -355,5 +355,28 @@ namespace PackageManagement.Tests @@ -355,5 +355,28 @@ namespace PackageManagement.Tests
Assert.AreEqual(expectedPackage, actualPackage);
}
[Test]
public void Execute_PackageHasConstraint_LatestPackageIsNotUpdatedButPackageWithHighestVersionThatMatchesConstraint ()
{
CreateSolution ();
var constraintProvider = new DefaultConstraintProvider ();
var versionSpec = new VersionSpec ();
versionSpec.MinVersion = new SemanticVersion ("1.0");
versionSpec.IsMinInclusive = true;
versionSpec.IsMaxInclusive = true;
versionSpec.MaxVersion = new SemanticVersion ("2.0");
constraintProvider.AddConstraint ("MyPackage", versionSpec);
fakeProject.ConstraintProvider = constraintProvider;
fakeProject.AddFakePackageToSourceRepository ("MyPackage", "1.0");
FakePackage packageVersion2 = fakeProject.AddFakePackageToSourceRepository ("MyPackage", "2.0");
fakeProject.AddFakePackageToSourceRepository ("MyPackage", "3.0");
fakeProject.FakePackages.Add (new FakePackage ("MyPackage", "1.0"));
action.PackageId = "MyPackage";
action.Execute ();
Assert.AreEqual (packageVersion2, fakeProject.PackagePassedToUpdatePackage);
}
}
}

41
src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackagesTests.cs

@ -20,7 +20,9 @@ using System; @@ -20,7 +20,9 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Versioning;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
using NuGet;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
@ -37,6 +39,7 @@ namespace PackageManagement.Tests @@ -37,6 +39,7 @@ namespace PackageManagement.Tests
List<IPackage> sourceRepositoryPackages;
List<IPackage> packagesUsedWhenCheckingForUpdates;
bool includePreleaseUsedWhenCheckingForUpdates;
FakePackageManagementProject project;
[SetUp]
public void Init()
@ -66,7 +69,17 @@ namespace PackageManagement.Tests @@ -66,7 +69,17 @@ namespace PackageManagement.Tests
})
.Return(sourceRepositoryPackages.AsQueryable());
updatedPackages = new UpdatedPackages(installedPackages.AsQueryable(), sourceRepository);
updatedPackages = new UpdatedPackages(installedPackages.AsQueryable(), sourceRepository, NullConstraintProvider.Instance);
}
void CreateProject()
{
project = new FakePackageManagementProject();
}
void CreateUpdatedPackages(IPackageRepository repository)
{
updatedPackages = new UpdatedPackages(project, repository);
}
IPackage AddPackageToSourceRepository(string id, string version)
@ -166,5 +179,31 @@ namespace PackageManagement.Tests @@ -166,5 +179,31 @@ namespace PackageManagement.Tests
Assert.IsFalse(includePreleaseUsedWhenCheckingForUpdates);
}
[Test]
public void GetUpdatedPackages_OnePackageReferencedWithConstraintAndUpdatesAvailable_LatestVersionReturnedBasedOnConstraint()
{
CreateProject();
project.FakePackages.Add(new FakePackage("Test", "1.0"));
var sourceRepository = new FakePackageRepository();
FakePackage packageVersion2 = sourceRepository.AddFakePackageWithVersion("Test", "2.0");
FakePackage [] expectedPackages = new [] {
packageVersion2
};
sourceRepository.AddFakePackageWithVersion("Test", "3.0");
var versionSpec = new VersionSpec();
versionSpec.MinVersion = new SemanticVersion("1.0");
versionSpec.IsMinInclusive = true;
versionSpec.MaxVersion = new SemanticVersion("2.0");
versionSpec.IsMaxInclusive = true;
var constraintProvider = new DefaultConstraintProvider();
constraintProvider.AddConstraint("Test", versionSpec);
project.ConstraintProvider = constraintProvider;
CreateUpdatedPackages(sourceRepository);
IEnumerable<IPackage> packages = updatedPackages.GetUpdatedPackages();
PackageCollectionAssert.AreEqual(expectedPackages, packages);
}
}
}

27
src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackagesViewModelTests.cs

@ -787,5 +787,32 @@ namespace PackageManagement.Tests @@ -787,5 +787,32 @@ namespace PackageManagement.Tests
operationAwareRepository.AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Update, null);
}
[Test]
public void ReadPackages_TwoPackagesInSourceRepositoryAndTwoNewerPackageVersionAvailableAndProjectHasConstraint_NewerPackageVersionThatMeetsConstraintIsDisplayed()
{
CreateViewModel();
var versionSpec = new VersionSpec();
versionSpec.MinVersion = new SemanticVersion("1.0");
versionSpec.IsMinInclusive = true;
versionSpec.MaxVersion = new SemanticVersion("2.0");
versionSpec.IsMaxInclusive = true;
var constraintProvider = new DefaultConstraintProvider();
constraintProvider.AddConstraint("Test", versionSpec);
solution.FakeProjectToReturnFromGetProject.ConstraintProvider = constraintProvider;
AddPackageToLocalRepository("Test", "1.0.0.0");
AddPackageToActiveRepository("Test", "1.0.0.0");
FakePackage expectedPackage = AddPackageToActiveRepository("Test", "2.0.0.0");
AddPackageToActiveRepository("Test", "3.0.0.0");
viewModel.ReadPackages();
CompleteReadPackagesTask();
var expectedPackages = new FakePackage[] {
expectedPackage
};
PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
}
}
}

Loading…
Cancel
Save