Browse Source

Add update-package cmdlet.

pull/15/head
Matt Ward 14 years ago
parent
commit
6aae2a7abe
  1. 1
      src/AddIns/Misc/PackageManagement/Cmdlets/Project/PackageManagement.Cmdlets.csproj
  2. 59
      src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs
  3. 41
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/TestableUpdatePackageCmdlet.cs
  4. 2
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/PackageManagement.Cmdlets.Tests.csproj
  5. 229
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs
  6. 20
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs
  7. 4
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManager.cs
  8. 6
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs
  9. 2
      src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopPackageManager.cs
  10. 29
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs
  11. 8
      src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManager.cs
  12. 15
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/UpdatePackageHelper.cs
  13. 265
      src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs
  14. 22
      src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopPackageManagerTests.cs

1
src/AddIns/Misc/PackageManagement/Cmdlets/Project/PackageManagement.Cmdlets.csproj

@ -50,6 +50,7 @@ @@ -50,6 +50,7 @@
<Compile Include="Src\ITerminatingCmdlet.cs" />
<Compile Include="Src\PackageManagementCmdlet.cs" />
<Compile Include="Src\UninstallPackageCmdlet.cs" />
<Compile Include="Src\UpdatePackageCmdlet.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj">

59
src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs

@ -0,0 +1,59 @@ @@ -0,0 +1,59 @@
// 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.Management.Automation;
using ICSharpCode.PackageManagement.Scripting;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
namespace ICSharpCode.PackageManagement.Cmdlets
{
[Cmdlet(VerbsData.Update, "Package")]
public class UpdatePackageCmdlet : PackageManagementCmdlet
{
public UpdatePackageCmdlet()
: this(
ServiceLocator.PackageManagementService,
ServiceLocator.PackageManagementConsoleHost,
null)
{
}
public UpdatePackageCmdlet(
IPackageManagementService packageManagementService,
IPackageManagementConsoleHost consoleHost,
ICmdletTerminatingError terminatingError)
: base(packageManagementService, consoleHost, terminatingError)
{
}
[Parameter(Position = 0, Mandatory = true)]
public string Id { get; set; }
[Parameter(Position = 1)]
public string ProjectName { get; set; }
[Parameter(Position = 2)]
public Version Version { get; set; }
[Parameter(Position = 3)]
public string Source { get; set; }
[Parameter]
public SwitchParameter IgnoreDependencies { get; set; }
protected override void ProcessRecord()
{
ThrowErrorIfProjectNotOpen();
UpdatePackage();
}
void UpdatePackage()
{
PackageSource packageSource = GetActivePackageSource(Source);
MSBuildBasedProject project = GetActiveProject(ProjectName);
PackageManagementService.UpdatePackage(Id, Version, project, packageSource, !IgnoreDependencies.IsPresent);
}
}
}

41
src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/TestableUpdatePackageCmdlet.cs

@ -0,0 +1,41 @@ @@ -0,0 +1,41 @@
// 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 ICSharpCode.PackageManagement.Cmdlets;
using ICSharpCode.PackageManagement.Design;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Cmdlets.Tests.Helpers
{
public class TestableUpdatePackageCmdlet : UpdatePackageCmdlet
{
public FakeCmdletTerminatingError FakeCmdletTerminatingError;
public FakePackageManagementConsoleHost FakePackageManagementConsoleHost;
public FakePackageManagementService FakePackageManagementService;
public TestableUpdatePackageCmdlet()
: this(
new FakePackageManagementService(),
new FakePackageManagementConsoleHost(),
new FakeCmdletTerminatingError())
{
}
public TestableUpdatePackageCmdlet(
FakePackageManagementService packageManagementService,
FakePackageManagementConsoleHost consoleHost,
FakeCmdletTerminatingError cmdletTerminatingError)
: base(packageManagementService, consoleHost, cmdletTerminatingError)
{
this.FakePackageManagementService = packageManagementService;
this.FakePackageManagementConsoleHost = consoleHost;
this.FakeCmdletTerminatingError = cmdletTerminatingError;
}
public void CallProcessRecord()
{
base.ProcessRecord();
}
}
}

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

@ -50,12 +50,14 @@ @@ -50,12 +50,14 @@
<Compile Include="Helpers\TestableInstallPackageCmdlet.cs" />
<Compile Include="Helpers\TestablePackageManagementCmdlet.cs" />
<Compile Include="Helpers\TestableUninstallPackageCmdlet.cs" />
<Compile Include="Helpers\TestableUpdatePackageCmdlet.cs" />
<Compile Include="Src\CmdletTerminatorErrorTests.cs" />
<Compile Include="Src\GetPackageCmdletTests.cs" />
<Compile Include="Src\InstallPackageCmdletTests.cs" />
<Compile Include="Src\CmdletTestsBase.cs" />
<Compile Include="Src\PackageManagementCmdletTests.cs" />
<Compile Include="Src\UninstallPackageCmdletTests.cs" />
<Compile Include="Src\UpdatePackageCmdletTests.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj">

229
src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs

@ -0,0 +1,229 @@ @@ -0,0 +1,229 @@
// 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.Management.Automation;
using ICSharpCode.PackageManagement.Design;
using NUnit.Framework;
using PackageManagement.Cmdlets.Tests.Helpers;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Cmdlets.Tests
{
[TestFixture]
public class UpdatePackageCmdletTests : CmdletTestsBase
{
TestableUpdatePackageCmdlet cmdlet;
FakeCmdletTerminatingError fakeTerminatingError;
FakePackageManagementService fakePackageManagementService;
void CreateCmdletWithoutActiveProject()
{
cmdlet = new TestableUpdatePackageCmdlet();
fakeTerminatingError = cmdlet.FakeCmdletTerminatingError;
fakeConsoleHost = cmdlet.FakePackageManagementConsoleHost;
fakePackageManagementService = cmdlet.FakePackageManagementService;
}
void CreateCmdletWithActivePackageSourceAndProject()
{
CreateCmdletWithoutActiveProject();
AddPackageSourceToConsoleHost();
AddDefaultProjectToConsoleHost();
}
void RunCmdlet()
{
cmdlet.CallProcessRecord();
}
void SetIdParameter(string id)
{
cmdlet.Id = id;
}
void EnableIgnoreDependenciesParameter()
{
cmdlet.IgnoreDependencies = new SwitchParameter(true);
}
void SetSourceParameter(string source)
{
cmdlet.Source = source;
}
void SetVersionParameter(Version version)
{
cmdlet.Version = version;
}
void SetProjectNameParameter(string name)
{
cmdlet.ProjectName = name;
}
[Test]
public void ProcessRecord_NoActiveProject_ThrowsNoProjectOpenTerminatingError()
{
CreateCmdletWithoutActiveProject();
AddPackageSourceToConsoleHost();
SetIdParameter("Test");
RunCmdlet();
Assert.IsTrue(fakeTerminatingError.IsThrowNoProjectOpenErrorCalled);
}
[Test]
public void ProcessRecord_ProjectIsActiveInConsoleHost_NoTerminatingErrorThrown()
{
CreateCmdletWithActivePackageSourceAndProject();
SetIdParameter("Test");
RunCmdlet();
Assert.IsFalse(fakeTerminatingError.IsThrowNoProjectOpenErrorCalled);
}
[Test]
public void ProcessRecord_PackageIdSpecified_PackageIdUsedToUpdatePackage()
{
CreateCmdletWithActivePackageSourceAndProject();
SetIdParameter("Test");
RunCmdlet();
var actualPackageId = fakePackageManagementService.PackageIdPassedToUpdatePackage;
Assert.AreEqual("Test", actualPackageId);
}
[Test]
public void ProcessRecord_PackageIdSpecified_ActivePackageSourceUsedToUpdatePackage()
{
CreateCmdletWithoutActiveProject();
AddDefaultProjectToConsoleHost();
var packageSource = AddPackageSourceToConsoleHost();
SetIdParameter("Test");
RunCmdlet();
var actualPackageSource = fakePackageManagementService.PackageSourcePassedToUpdatePackage;
Assert.AreEqual(packageSource, actualPackageSource);
}
[Test]
public void ProcessRecord_PackageIdSpecified_ActiveProjectUsedToUpdatePackage()
{
CreateCmdletWithoutActiveProject();
AddPackageSourceToConsoleHost();
var project = AddDefaultProjectToConsoleHost();
SetIdParameter("Test");
RunCmdlet();
var actualProject = fakePackageManagementService.ProjectPassedToUpdatePackage;
Assert.AreEqual(project, actualProject);
}
[Test]
public void ProcessRecord_IgnoreDependenciesParameterSet_UpdateDependenciesIsFalseWhenUpdatingPackage()
{
CreateCmdletWithActivePackageSourceAndProject();
SetIdParameter("Test");
EnableIgnoreDependenciesParameter();
RunCmdlet();
bool result = fakePackageManagementService.UpdateDependenciesPassedToUpdatePackage;
Assert.IsFalse(result);
}
[Test]
public void ProcessRecord_IgnoreDependenciesParameterNotSet_UpdateDependenciesIsTrueWhenUpdatingPackage()
{
CreateCmdletWithActivePackageSourceAndProject();
SetIdParameter("Test");
RunCmdlet();
bool result = fakePackageManagementService.UpdateDependenciesPassedToUpdatePackage;
Assert.IsTrue(result);
}
[Test]
public void ProcessRecord_SourceParameterSet_CustomSourceUsedWhenUpdatingPackage()
{
CreateCmdletWithActivePackageSourceAndProject();
SetIdParameter("Test");
SetSourceParameter("http://sharpdevelop.net/packages");
RunCmdlet();
var expected = "http://sharpdevelop.net/packages";
var actual = fakePackageManagementService.PackageSourcePassedToUpdatePackage.Source;
Assert.AreEqual(expected, actual);
}
[Test]
public void ProcessRecord_PackageVersionParameterSet_VersionUsedWhenUpdatingPackage()
{
CreateCmdletWithActivePackageSourceAndProject();
SetIdParameter("Test");
var version = new Version("1.0.1");
SetVersionParameter(version);
RunCmdlet();
var actualVersion = fakePackageManagementService.VersionPassedToUpdatePackage;
Assert.AreEqual(version, actualVersion);
}
[Test]
public void ProcessRecord_PackageVersionParameterNotSet_VersionUsedWhenUpdatingPackageIsNull()
{
CreateCmdletWithActivePackageSourceAndProject();
SetIdParameter("Test");
RunCmdlet();
var actualVersion = fakePackageManagementService.VersionPassedToUpdatePackage;
Assert.IsNull(actualVersion);
}
[Test]
public void ProcessRecord_ProjectNameSpecified_ProjectMatchingProjectNameUsedWhenUpdatingPackage()
{
CreateCmdletWithActivePackageSourceAndProject();
fakePackageManagementService.FakeProjectToReturnFromGetProject = ProjectHelper.CreateTestProject();
SetIdParameter("Test");
SetProjectNameParameter("MyProject");
RunCmdlet();
var actualProject = fakePackageManagementService.ProjectPassedToUpdatePackage;
var expectedProject = fakePackageManagementService.FakeProjectToReturnFromGetProject;
Assert.AreEqual(expectedProject, actualProject);
}
[Test]
public void ProcessRecord_ProjectNameSpecified_ProjectNameUsedToFindProject()
{
CreateCmdletWithActivePackageSourceAndProject();
SetIdParameter("Test");
SetProjectNameParameter("MyProject");
RunCmdlet();
var actual = fakePackageManagementService.NamePassedToGetProject;
var expected = "MyProject";
Assert.AreEqual(expected, actual);
}
}
}

20
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs

@ -248,5 +248,25 @@ namespace ICSharpCode.PackageManagement.Design @@ -248,5 +248,25 @@ namespace ICSharpCode.PackageManagement.Design
PackagePassedToUpdatePackage = package;
PackageOperationsPassedToUpdatePackage = operations;
}
public string PackageIdPassedToUpdatePackage;
public Version VersionPassedToUpdatePackage;
public MSBuildBasedProject ProjectPassedToUpdatePackage;
public PackageSource PackageSourcePassedToUpdatePackage;
public bool UpdateDependenciesPassedToUpdatePackage;
public void UpdatePackage(
string packageId,
Version version,
MSBuildBasedProject project,
PackageSource packageSource,
bool updateDependencies)
{
PackageIdPassedToUpdatePackage = packageId;
VersionPassedToUpdatePackage = version;
ProjectPassedToUpdatePackage = project;
PackageSourcePassedToUpdatePackage = packageSource;
UpdateDependenciesPassedToUpdatePackage = updateDependencies;
}
}
}

4
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManager.cs

@ -134,11 +134,13 @@ namespace ICSharpCode.PackageManagement.Design @@ -134,11 +134,13 @@ namespace ICSharpCode.PackageManagement.Design
public IPackage PackagePassedToUpdatePackage;
public IEnumerable<PackageOperation> PackageOperationsPassedToUpdatePackage;
public bool UpdateDependenciesPassedToUpdatePackage;
public void UpdatePackage(IPackage package, IEnumerable<PackageOperation> operations)
public void UpdatePackage(IPackage package, IEnumerable<PackageOperation> operations, bool updateDependencies)
{
PackagePassedToUpdatePackage = package;
PackageOperationsPassedToUpdatePackage = operations;
UpdateDependenciesPassedToUpdatePackage = updateDependencies;
}
}
}

6
src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs

@ -40,6 +40,12 @@ namespace ICSharpCode.PackageManagement @@ -40,6 +40,12 @@ namespace ICSharpCode.PackageManagement
bool removeDependencies);
void UpdatePackage(IPackageRepository repository, IPackage package, IEnumerable<PackageOperation> operations);
void UpdatePackage(
string packageId,
Version version,
MSBuildBasedProject project,
PackageSource packageSource,
bool updateDependencies);
MSBuildBasedProject GetProject(string name);

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

@ -13,7 +13,7 @@ namespace ICSharpCode.PackageManagement @@ -13,7 +13,7 @@ namespace ICSharpCode.PackageManagement
void InstallPackage(IPackage package, IEnumerable<PackageOperation> operations, bool ignoreDependencies);
void UninstallPackage(IPackage package);
void UpdatePackage(IPackage package, IEnumerable<PackageOperation> operations);
void UpdatePackage(IPackage package, IEnumerable<PackageOperation> operations, bool updateDependencies);
IEnumerable<PackageOperation> GetInstallPackageOperations(IPackage package, bool ignoreDependencies);
}

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

@ -291,7 +291,34 @@ namespace ICSharpCode.PackageManagement @@ -291,7 +291,34 @@ namespace ICSharpCode.PackageManagement
IEnumerable<PackageOperation> operations)
{
ISharpDevelopPackageManager packageManager = CreatePackageManager(repository);
packageManager.UpdatePackage(package, operations);
UpdatePackage(packageManager, package, operations, true);
}
public void UpdatePackage(
string packageId,
Version version,
MSBuildBasedProject project,
PackageSource packageSource,
bool updateDependencies)
{
ISharpDevelopPackageManager packageManager = CreatePackageManager(packageSource, project);
IPackage package = packageManager.SourceRepository.FindPackage(packageId, version);
UpdatePackage(packageManager, package, updateDependencies);
}
void UpdatePackage(ISharpDevelopPackageManager packageManager, IPackage package, bool updateDependencies)
{
IEnumerable<PackageOperation> operations = packageManager.GetInstallPackageOperations(package, !updateDependencies);
UpdatePackage(packageManager, package, operations, updateDependencies);
}
void UpdatePackage(
ISharpDevelopPackageManager packageManager,
IPackage package,
IEnumerable<PackageOperation> operations,
bool updateDependencies)
{
packageManager.UpdatePackage(package, operations, updateDependencies);
projectService.RefreshProjectBrowser();
RecentPackageRepository.AddPackage(package);
OnPackageInstalled();

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

@ -104,17 +104,11 @@ namespace ICSharpCode.PackageManagement @@ -104,17 +104,11 @@ namespace ICSharpCode.PackageManagement
ignoreDependencies);
}
public void UpdatePackage(IPackage package, IEnumerable<PackageOperation> operations)
public void UpdatePackage(IPackage package, IEnumerable<PackageOperation> operations, bool updateDependencies)
{
foreach (PackageOperation operation in operations) {
Execute(operation);
}
UpdatePackageReference(package);
}
void UpdatePackageReference(IPackage package)
{
bool updateDependencies = true;
UpdatePackageReference(package, updateDependencies);
}

15
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/UpdatePackageHelper.cs

@ -37,5 +37,20 @@ namespace PackageManagement.Tests.Helpers @@ -37,5 +37,20 @@ namespace PackageManagement.Tests.Helpers
PackageOperations.Add(operation);
return package;
}
public PackageSource PackageSource = new PackageSource("http://sharpdevelop/packages");
public TestableProject TestableProject = ProjectHelper.CreateTestProject();
public bool UpdateDependencies;
public Version Version;
public void UpdatePackageById(string packageId)
{
packageManagementService.UpdatePackage(
packageId,
Version,
TestableProject,
PackageSource,
UpdateDependencies);
}
}
}

265
src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs

@ -247,7 +247,7 @@ namespace PackageManagement.Tests @@ -247,7 +247,7 @@ namespace PackageManagement.Tests
}
[Test]
public void PackageInstalled_PackageIsInstalled_EventFiresAfterPackageInstalled()
public void InstallPackage_PackageIsInstalled_EventFiresAfterPackageInstalled()
{
CreatePackageManagementService();
@ -261,7 +261,7 @@ namespace PackageManagement.Tests @@ -261,7 +261,7 @@ namespace PackageManagement.Tests
}
[Test]
public void PackageUninstalled_PackageIsUninstalled_EventFiresAfterPackageUninstalled()
public void UninstallPackage_PackageIsUninstalled_EventFiresAfterPackageUninstalled()
{
CreatePackageManagementService();
@ -514,7 +514,7 @@ namespace PackageManagement.Tests @@ -514,7 +514,7 @@ namespace PackageManagement.Tests
}
[Test]
public void InstallPackage_OnePackageOperation_PackageInstalledAddedToRecentPackagesRepository()
public void InstallPackage_OnePackageOperation_PackageInstalledIsAddedToRecentPackagesRepository()
{
CreatePackageManagementService();
installPackageHelper.AddPackageInstallOperation();
@ -740,6 +740,53 @@ namespace PackageManagement.Tests @@ -740,6 +740,53 @@ namespace PackageManagement.Tests
Assert.IsFalse(result);
}
[Test]
public void InstallPackage_PackageIdAndSourcePassed_ProjectBrowserIsRefreshed()
{
CreatePackageManagementService();
var package = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
installPackageHelper.InstallPackageById("PackageId");
bool refreshed = fakeProjectService.IsRefreshProjectBrowserCalled;
Assert.IsTrue(refreshed);
}
[Test]
public void InstalPackage_PackageIdAndSourcePassed_PackageIsAddedToRecentPackages()
{
CreatePackageManagementService();
var package = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
installPackageHelper.InstallPackageById("PackageId");
var recentPackages = packageManagementService.RecentPackageRepository.GetPackages();
var expectedPackages = new FakePackage[] {
package
};
PackageCollectionAssert.AreEqual(expectedPackages, recentPackages);
}
[Test]
public void InstallPackage_PackageIsInstalled_EventFiresAfterPackageInstald()
{
CreatePackageManagementService();
var expectedPackage = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
IPackage package = null;
packageManagementService.PackageInstalled += (sender, e) => {
package = fakePackageManagerFactory.FakePackageManager.PackagePassedToInstallPackage;
};
installPackageHelper.InstallPackageById("PackageId");
Assert.AreEqual(expectedPackage, package);
}
[Test]
public void CreatePackageManagerForActiveProject_ProjectIsSelected_ReferencesSelectedProject()
{
@ -816,7 +863,7 @@ namespace PackageManagement.Tests @@ -816,7 +863,7 @@ namespace PackageManagement.Tests
}
[Test]
public void PackageInstalled_PackageIdSpecified_EventFiresAfterPackageInstalled()
public void InstallPackage_PackageIdSpecified_EventFiresAfterPackageInstalled()
{
CreatePackageManagementService();
@ -988,6 +1035,17 @@ namespace PackageManagement.Tests @@ -988,6 +1035,17 @@ namespace PackageManagement.Tests
Assert.IsTrue(refreshed);
}
[Test]
public void UpdatePackage_PackageAndRepositoryPassed_DependenciesUpdated()
{
CreatePackageManagementService();
updatePackageHelper.UpdateTestPackage();
bool result = fakePackageManagerFactory.FakePackageManager.UpdateDependenciesPassedToUpdatePackage;
Assert.IsTrue(result);
}
[Test]
public void UpdatePackage_PackageAndRepositoryPassed_PackageUpdateIsAddedToRecentPackagesRepository()
{
@ -1015,7 +1073,204 @@ namespace PackageManagement.Tests @@ -1015,7 +1073,204 @@ namespace PackageManagement.Tests
updatePackageHelper.UpdateTestPackage();
Assert.AreEqual(installPackageHelper.TestPackage, package);
}
[Test]
public void UpdatePackage_PackageIdAndSourceAndProjectPassed_RepositoryCreatedForPackageSource()
{
CreatePackageManagementService();
AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
updatePackageHelper.UpdatePackageById("PackageId");
var expectedPackageSource = updatePackageHelper.PackageSource;
var actualPackageSource = fakePackageRepositoryFactory.FirstPackageSourcePassedToCreateRepository;
Assert.AreEqual(expectedPackageSource, actualPackageSource);
}
[Test]
public void UpdatePackage_PackageIdAndSourceAndProjectPassed_UpdatesPackageFromPackageSource()
{
CreatePackageManagementService();
var package = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
updatePackageHelper.UpdatePackageById("PackageId");
var actualPackage = fakePackageManagerFactory.FakePackageManager.PackagePassedToUpdatePackage;
Assert.AreEqual(package, actualPackage);
}
[Test]
public void UpdatePackage_PackageIdAndSourceAndProjectPassed_RepositoryCreatedFromPackageSourceIsUsedToCreatePackageManager()
{
CreatePackageManagementService();
var package = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
var repository = fakePackageRepositoryFactory.FakePackageRepository;
updatePackageHelper.UpdatePackageById("PackageId");
var actualRepository = fakePackageManagerFactory.PackageRepositoryPassedToCreatePackageManager;
Assert.AreEqual(repository, actualRepository);
}
[Test]
public void UpdatePackage_PackageIdAndSourceAndProjectPassed_ProjectIsUsedToCreatePackageManager()
{
CreatePackageManagementService();
fakeProjectService.CurrentProject = null;
AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
updatePackageHelper.UpdatePackageById("PackageId");
var actualProject = fakePackageManagerFactory.ProjectPassedToCreateRepository;
var expectedProject = updatePackageHelper.TestableProject;
Assert.AreEqual(expectedProject, actualProject);
}
[Test]
public void UpdatePackage_PackageIdAndSourceAndProjectPassed_PackageOperationsToUpdatePackage()
{
CreatePackageManagementService();
AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
var packageOperations = AddOnePackageOperationToPackageManager();
updatePackageHelper.UpdatePackageById("PackageId");
var packageManager = fakePackageManagerFactory.FakePackageManager;
var actualPackageOperations = packageManager.PackageOperationsPassedToUpdatePackage;
Assert.AreEqual(packageOperations, actualPackageOperations);
}
[Test]
public void UpdatePackage_PackageIdAndSourceAndProjectPassed_PackageOperationsCreatedForPackage()
{
CreatePackageManagementService();
var package = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
var packageOperations = AddOnePackageOperationToPackageManager();
updatePackageHelper.UpdatePackageById("PackageId");
var actualPackage = fakePackageManagerFactory.FakePackageManager.PackagePassedToGetInstallPackageOperations;
Assert.AreEqual(package, actualPackage);
}
[Test]
public void UpdatePackage_PackageIdAndSourceAndProjectPassedAndUpdateDependenciesIsTrue_DependenciesUpdatedWhenInstallingPackage()
{
CreatePackageManagementService();
var package = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
updatePackageHelper.UpdateDependencies = true;
updatePackageHelper.UpdatePackageById("PackageId");
bool result = fakePackageManagerFactory.FakePackageManager.UpdateDependenciesPassedToUpdatePackage;
Assert.IsTrue(result);
}
[Test]
public void UpdatePackage_PackageIdAndSourceAndProjectPassedAndUpdateDependenciesIsFalse_DependenciesNotUpdateWhenGettingPackageOperations()
{
CreatePackageManagementService();
var package = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
updatePackageHelper.UpdateDependencies = false;
updatePackageHelper.UpdatePackageById("PackageId");
bool result = fakePackageManagerFactory.FakePackageManager.UpdateDependenciesPassedToUpdatePackage;
Assert.IsFalse(result);
}
[Test]
public void UpdatePackage_PackageIdAndSourceAndProjectPassedAndUpdateDependenciesIsFalse_DependenciesIgnoredWhenGettingPackageOperations()
{
CreatePackageManagementService();
var package = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
updatePackageHelper.UpdateDependencies = false;
updatePackageHelper.UpdatePackageById("PackageId");
bool result = fakePackageManagerFactory.FakePackageManager.IgnoreDependenciesPassedToGetInstallPackageOperations;
Assert.IsTrue(result);
}
[Test]
public void UpdatePackage_PackageIdAndSourceAndProjectPassedAndUpdateDependenciesIsTrue_DependenciesNotIgnoredWhenInstallingPackage()
{
CreatePackageManagementService();
var package = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
updatePackageHelper.UpdateDependencies = true;
updatePackageHelper.UpdatePackageById("PackageId");
bool result = fakePackageManagerFactory.FakePackageManager.IgnoreDependenciesPassedToInstallPackage;
Assert.IsFalse(result);
}
[Test]
public void UpdatePackage_PackageIdAndSourcePassed_ProjectBrowserIsRefreshed()
{
CreatePackageManagementService();
var package = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
updatePackageHelper.UpdatePackageById("PackageId");
bool refreshed = fakeProjectService.IsRefreshProjectBrowserCalled;
Assert.IsTrue(refreshed);
}
[Test]
public void UpdatePackage_PackageIdAndSourcePassed_PackageIsAddedToRecentPackages()
{
CreatePackageManagementService();
var package = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
updatePackageHelper.UpdatePackageById("PackageId");
var recentPackages = packageManagementService.RecentPackageRepository.GetPackages();
var expectedPackages = new FakePackage[] {
package
};
PackageCollectionAssert.AreEqual(expectedPackages, recentPackages);
}
[Test]
public void UpdatePackage_PackageIsUpdated_EventFiresAfterPackageUpdated()
{
CreatePackageManagementService();
var expectedPackage = AddOneFakePackageToPackageRepositoryFactoryRepository("PackageId");
MakePackageManagementSourceRepositoryAndPackageRepositoryFactoryRepositoryTheSame();
IPackage package = null;
packageManagementService.PackageInstalled += (sender, e) => {
package = fakePackageManagerFactory.FakePackageManager.PackagePassedToUpdatePackage;
};
updatePackageHelper.UpdatePackageById("PackageId");
Assert.AreEqual(expectedPackage, package);
}
}
}

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

@ -185,7 +185,7 @@ namespace PackageManagement.Tests @@ -185,7 +185,7 @@ namespace PackageManagement.Tests
{
FakePackage package = CreateFakePackage();
var operations = new List<PackageOperation>();
packageManager.UpdatePackage(package, operations);
packageManager.UpdatePackage(package, operations, true);
return package;
}
@ -195,9 +195,17 @@ namespace PackageManagement.Tests @@ -195,9 +195,17 @@ namespace PackageManagement.Tests
operation
};
FakePackage package = CreateFakePackage();
packageManager.UpdatePackage(package, operations);
packageManager.UpdatePackage(package, operations, true);
return package;
}
FakePackage UpdatePackageWithNoPackageOperationsAndDoNotUpdateDependencies()
{
FakePackage package = CreateFakePackage();
var operations = new List<PackageOperation>();
packageManager.UpdatePackage(package, operations, false);
return package;
}
[Test]
public void ProjectManager_InstanceCreated_SourceRepositoryIsSharedRepositoryPassedToPackageManager()
@ -530,5 +538,15 @@ namespace PackageManagement.Tests @@ -530,5 +538,15 @@ namespace PackageManagement.Tests
Assert.AreEqual(operation.Package, fakeSolutionSharedRepository.FirstPackageAdded);
}
[Test]
public void UpdatePackage_UpdateDependenciesSetToFalse_DependenciesInProjectNotUpdated()
{
CreatePackageManager();
CreateTestableProjectManager();
UpdatePackageWithNoPackageOperationsAndDoNotUpdateDependencies();
Assert.IsFalse(testableProjectManager.UpdateDependenciesPassedToUpdatePackageReference);
}
}
}

Loading…
Cancel
Save