Browse Source

Add get-package cmdlet.

pull/15/head
Matt Ward 14 years ago
parent
commit
9e873eb31a
  1. 16
      src/AddIns/Misc/PackageManagement/Cmdlets/Project/Configuration/AssemblyInfo.cs
  2. 69
      src/AddIns/Misc/PackageManagement/Cmdlets/Project/PackageManagement.Cmdlets.csproj
  3. 208
      src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetPackageCmdlet.cs
  4. 16
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/Configuration/AssemblyInfo.cs
  5. 112
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/FakeCommandRuntime.cs
  6. 20
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/FakeErrorRecordFactory.cs
  7. 60
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/TestableGetPackageCmdlet.cs
  8. 78
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/PackageManagement.Cmdlets.Tests.csproj
  9. 569
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/GetPackageCmdletTests.cs
  10. 20
      src/AddIns/Misc/PackageManagement/PackageManagement.sln
  11. 12
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  12. 41
      src/AddIns/Misc/PackageManagement/Project/Scripts/Package.Format.ps1xml
  13. 2
      src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceView.xaml
  14. 10
      src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceViewModel.cs
  15. 15
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs
  16. 34
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs
  17. 7
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageRepository.cs
  18. 4
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs
  19. 32
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs
  20. 20
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/ErrorRecordFactory.cs
  21. 13
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IErrorRecordFactory.cs
  22. 15
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementAddInPath.cs
  23. 4
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPowerShellHost.cs
  24. 44
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementAddInPath.cs
  25. 25
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs
  26. 34
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellHost.cs
  27. 8
      src/AddIns/Misc/PackageManagement/Project/Src/ServiceLocator.cs
  28. 78
      src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackages.cs
  29. 25
      src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackagesViewModel.cs
  30. 4
      src/AddIns/Misc/PackageManagement/Project/Src/ViewModelLocator.cs
  31. 3
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  32. 2
      src/AddIns/Misc/PackageManagement/Test/Src/AddPackageReferenceViewModelTests.cs
  33. 21
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementAddInPath.cs
  34. 13
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePowerShellHost.cs
  35. 12
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageManagementConsoleHost.cs
  36. 60
      src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs
  37. 34
      src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostTests.cs
  38. 47
      src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackagesViewModelTests.cs

16
src/AddIns/Misc/PackageManagement/Cmdlets/Project/Configuration/AssemblyInfo.cs

@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
// 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.Reflection;
// Information about this assembly is defined by the following
// attributes.
//
// change them to the information which is associated with the assembly
// you compile.
[assembly: AssemblyTitle("PackageManagement.Cmdlets")]
[assembly: AssemblyDescription("Package Management PowerShell Cmdlets for SharpDevelop")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

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

@ -0,0 +1,69 @@ @@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<PropertyGroup>
<ProjectGuid>{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}</ProjectGuid>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<OutputType>Library</OutputType>
<RootNamespace>PackageManagement.Cmdlets</RootNamespace>
<AssemblyName>PackageManagement.Cmdlets</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<OutputPath>..\..\..\..\..\..\AddIns\Misc\PackageManagement\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'x86' ">
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DebugSymbols>True</DebugSymbols>
<DebugType>Full</DebugType>
<Optimize>False</Optimize>
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
<DefineConstants>DEBUG;TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<DebugSymbols>False</DebugSymbols>
<DebugType>None</DebugType>
<Optimize>True</Optimize>
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
<ItemGroup>
<Reference Include="NuGet.Core">
<HintPath>..\..\RequiredLibraries\NuGet.Core.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Management.Automation" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\..\..\..\..\Main\GlobalAssemblyInfo.cs">
<Link>Configuration\GlobalAssemblyInfo.cs</Link>
</Compile>
<Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="Src\GetPackageCmdlet.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj">
<Project>{2748AD25-9C63-4E12-877B-4DCE96FBED54}</Project>
<Name>ICSharpCode.SharpDevelop</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\..\Main\Core\Project\ICSharpCode.Core.csproj">
<Project>{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}</Project>
<Name>ICSharpCode.Core</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\Project\PackageManagement.csproj">
<Project>{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1}</Project>
<Name>PackageManagement</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Folder Include="Src" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
</Project>

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

@ -0,0 +1,208 @@ @@ -0,0 +1,208 @@
// 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 System.Linq;
using System.Management.Automation;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Scripting;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
namespace PackageManagement.Cmdlets
{
[Cmdlet(VerbsCommon.Get, "Package", DefaultParameterSetName=ParameterAttribute.AllParameterSets)]
public class GetPackageCmdlet : PSCmdlet
{
IPackageManagementService packageManagementService;
IPackageManagementConsoleHost consoleHost;
IErrorRecordFactory errorRecordFactory;
int? skip;
int? take;
public GetPackageCmdlet()
: this(
ServiceLocator.PackageManagementService,
ServiceLocator.PackageManagementConsoleHost,
new ErrorRecordFactory())
{
}
public GetPackageCmdlet(
IPackageManagementService packageManagementService,
IPackageManagementConsoleHost consoleHost,
IErrorRecordFactory errorRecordFactory)
{
this.packageManagementService = packageManagementService;
this.consoleHost = consoleHost;
this.errorRecordFactory = errorRecordFactory;
}
[Alias("Online", "Remote")]
[Parameter(ParameterSetName = "Available")]
public SwitchParameter ListAvailable { get; set; }
[Parameter(ParameterSetName = "Updated")]
public SwitchParameter Updates { get; set; }
[Parameter(Position = 0)]
public string Filter { get; set; }
[Parameter(ParameterSetName = "Available")]
[Parameter(ParameterSetName = "Updated")]
public string Source { get; set; }
[Parameter(ParameterSetName = "Recent")]
public SwitchParameter Recent { get; set; }
[Parameter]
[ValidateRange(0, Int32.MaxValue)]
public int Skip {
get { return skip.GetValueOrDefault(); }
set { skip = value; }
}
[Parameter]
[ValidateRange(0, Int32.MaxValue)]
public int Take {
get { return take.GetValueOrDefault(); }
set { take = value; }
}
protected override void ProcessRecord()
{
ValidateParameters();
IQueryable<IPackage> packages = GetPackages();
packages = OrderPackages(packages);
packages = SelectPackageRange(packages);
WritePackagesToOutputPipeline(packages);
}
void ValidateParameters()
{
if (ParametersRequireProject()) {
if (DefaultProject == null) {
ThrowProjectNotOpenTerminatorError();
}
}
}
bool ParametersRequireProject()
{
if (ListAvailable.IsPresent || Recent.IsPresent) {
return false;
}
return true;
}
void ThrowProjectNotOpenTerminatorError()
{
var error = errorRecordFactory.CreateNoProjectOpenErrorRecord();
CmdletThrowTerminatingError(error);
}
protected virtual void CmdletThrowTerminatingError(ErrorRecord errorRecord)
{
ThrowTerminatingError(errorRecord);
}
IQueryable<IPackage> GetPackages()
{
if (ListAvailable.IsPresent) {
return GetAvailablePackages();
} else if (Updates.IsPresent) {
return GetUpdatedPackages();
} else if (Recent.IsPresent) {
return GetRecentPackages();
}
return GetInstalledPackages();
}
IQueryable<IPackage> OrderPackages(IQueryable<IPackage> packages)
{
return packages.OrderBy(package => package.Id);
}
IQueryable<IPackage> SelectPackageRange(IQueryable<IPackage> packages)
{
if (skip.HasValue) {
packages = packages.Skip(skip.Value);
}
if (take.HasValue) {
packages = packages.Take(take.Value);
}
return packages;
}
IQueryable<IPackage> GetAvailablePackages()
{
IPackageRepository repository = CreatePackageRepositoryForActivePackageSource();
IQueryable<IPackage> packages = repository.GetPackages();
return FilterPackages(packages);
}
IPackageRepository CreatePackageRepositoryForActivePackageSource()
{
PackageSource source = GetActivePackageSource();
return packageManagementService.CreatePackageRepository(source);
}
PackageSource GetActivePackageSource()
{
if (Source != null) {
return new PackageSource(Source);
}
return consoleHost.ActivePackageSource;
}
IQueryable<IPackage> FilterPackages(IQueryable<IPackage> packages)
{
if (Filter != null) {
string[] searchTerms = Filter.Split(' ');
return packages.Find(searchTerms);
}
return packages;
}
IQueryable<IPackage> GetUpdatedPackages()
{
var updatedPackages = new UpdatedPackages(packageManagementService, DefaultProject);
updatedPackages.SearchTerms = Filter;
return updatedPackages.GetUpdatedPackages().AsQueryable();
}
IQueryable<IPackage> GetInstalledPackages()
{
IPackageRepository repository = CreatePackageRepositoryForActivePackageSource();
ISharpDevelopProjectManager projectManager = CreateProjectManagerForActiveProject(repository);
IQueryable<IPackage> packages = projectManager.LocalRepository.GetPackages();
return FilterPackages(packages);
}
ISharpDevelopProjectManager CreateProjectManagerForActiveProject(IPackageRepository repository)
{
return packageManagementService.CreateProjectManager(repository, DefaultProject);
}
MSBuildBasedProject DefaultProject {
get { return consoleHost.DefaultProject as MSBuildBasedProject; }
}
IQueryable<IPackage> GetRecentPackages()
{
IQueryable<IPackage> packages = packageManagementService.RecentPackageRepository.GetPackages();
return FilterPackages(packages);
}
void WritePackagesToOutputPipeline(IQueryable<IPackage> packages)
{
foreach (IPackage package in packages) {
WriteObject(package);
}
}
}
}

16
src/AddIns/Misc/PackageManagement/Cmdlets/Test/Configuration/AssemblyInfo.cs

@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
// 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.Reflection;
// Information about this assembly is defined by the following
// attributes.
//
// change them to the information which is associated with the assembly
// you compile.
[assembly: AssemblyTitle("PackageManagement.Cmdlets.Tests")]
[assembly: AssemblyDescription("Package Management PowerShell Cmdlets Unit Tests")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

112
src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/FakeCommandRuntime.cs

@ -0,0 +1,112 @@ @@ -0,0 +1,112 @@
// 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 System.Management.Automation;
using System.Management.Automation.Host;
namespace PackageManagement.Cmdlets.Tests.Helpers
{
public class FakeCommandRuntime : ICommandRuntime
{
public List<object> ObjectsPassedToWriteObject = new List<object>();
public PSHost Host {
get {
throw new NotImplementedException();
}
}
public PSTransactionContext CurrentPSTransaction {
get {
throw new NotImplementedException();
}
}
public void WriteDebug(string text)
{
throw new NotImplementedException();
}
public void WriteError(ErrorRecord errorRecord)
{
throw new NotImplementedException();
}
public void WriteObject(object sendToPipeline)
{
ObjectsPassedToWriteObject.Add(sendToPipeline);
}
public void WriteObject(object sendToPipeline, bool enumerateCollection)
{
throw new NotImplementedException();
}
public void WriteProgress(ProgressRecord progressRecord)
{
throw new NotImplementedException();
}
public void WriteProgress(long sourceId, ProgressRecord progressRecord)
{
throw new NotImplementedException();
}
public void WriteVerbose(string text)
{
throw new NotImplementedException();
}
public void WriteWarning(string text)
{
throw new NotImplementedException();
}
public void WriteCommandDetail(string text)
{
throw new NotImplementedException();
}
public bool ShouldProcess(string target)
{
throw new NotImplementedException();
}
public bool ShouldProcess(string target, string action)
{
throw new NotImplementedException();
}
public bool ShouldProcess(string verboseDescription, string verboseWarning, string caption)
{
throw new NotImplementedException();
}
public bool ShouldProcess(string verboseDescription, string verboseWarning, string caption, out ShouldProcessReason shouldProcessReason)
{
throw new NotImplementedException();
}
public bool ShouldContinue(string query, string caption)
{
throw new NotImplementedException();
}
public bool ShouldContinue(string query, string caption, ref bool yesToAll, ref bool noToAll)
{
throw new NotImplementedException();
}
public bool TransactionAvailable()
{
throw new NotImplementedException();
}
public void ThrowTerminatingError(ErrorRecord errorRecord)
{
throw new NotImplementedException();
}
}
}

20
src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/FakeErrorRecordFactory.cs

@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
// 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;
namespace PackageManagement.Cmdlets.Tests.Helpers
{
public class FakeErrorRecordFactory : IErrorRecordFactory
{
public ErrorRecord ErrorRecordToReturnFromCreateNoProjectOpenErrorRecord =
new ErrorRecord(new InvalidOperationException(), "NoProjectOpen", ErrorCategory.InvalidOperation, null);
public ErrorRecord CreateNoProjectOpenErrorRecord()
{
return ErrorRecordToReturnFromCreateNoProjectOpenErrorRecord;
}
}
}

60
src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/TestableGetPackageCmdlet.cs

@ -0,0 +1,60 @@ @@ -0,0 +1,60 @@
// 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 System.Management.Automation;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
using NuGet;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Cmdlets.Tests.Helpers
{
public class TestableGetPackageCmdlet : GetPackageCmdlet
{
public FakePackageManagementService FakePackageManagementService;
public FakeCommandRuntime FakeCommandRuntime;
public List<IPackage> PackagesPassedToWriteObject = new List<IPackage>();
public FakePackageManagementConsoleHost FakePackageManagementConsoleHost;
public FakeErrorRecordFactory FakeErrorRecordFactory;
public TestableGetPackageCmdlet()
: this(
new FakePackageManagementService(),
new FakePackageManagementConsoleHost(),
new FakeCommandRuntime(),
new FakeErrorRecordFactory())
{
}
public TestableGetPackageCmdlet(
FakePackageManagementService packageManagementService,
FakePackageManagementConsoleHost consoleHost,
FakeCommandRuntime commandRuntime,
FakeErrorRecordFactory errorRecordFactory)
: base(packageManagementService, consoleHost, errorRecordFactory)
{
this.FakePackageManagementService = packageManagementService;
this.FakePackageManagementConsoleHost = consoleHost;
this.FakeCommandRuntime = commandRuntime;
this.CommandRuntime = commandRuntime;
this.FakeErrorRecordFactory = errorRecordFactory;
}
public void RunProcessRecord()
{
base.ProcessRecord();
}
public bool IsThrowTerminatingErrorCalled { get; set; }
public ErrorRecord ErrorRecordPassedToThrowTerminatingError;
protected override void CmdletThrowTerminatingError(ErrorRecord errorRecord)
{
IsThrowTerminatingErrorCalled = true;
ErrorRecordPassedToThrowTerminatingError = errorRecord;
}
}
}

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

@ -0,0 +1,78 @@ @@ -0,0 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<PropertyGroup>
<ProjectGuid>{11115C83-3DB1-431F-8B98-59040359238D}</ProjectGuid>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<OutputType>Library</OutputType>
<RootNamespace>PackageManagement.Cmdlets.Tests</RootNamespace>
<AssemblyName>PackageManagement.Cmdlets.Tests</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<OutputPath>..\..\..\..\..\..\bin\UnitTests\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'x86' ">
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DebugSymbols>True</DebugSymbols>
<DebugType>Full</DebugType>
<Optimize>False</Optimize>
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
<DefineConstants>DEBUG;TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<DebugSymbols>False</DebugSymbols>
<DebugType>None</DebugType>
<Optimize>True</Optimize>
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
<ItemGroup>
<Reference Include="NuGet.Core">
<HintPath>..\..\RequiredLibraries\NuGet.Core.dll</HintPath>
</Reference>
<Reference Include="nunit.framework">
<HintPath>..\..\..\..\..\Tools\NUnit\nunit.framework.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Management.Automation" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\..\..\..\..\Main\GlobalAssemblyInfo.cs">
<Link>Configuration\GlobalAssemblyInfo.cs</Link>
</Compile>
<Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="Helpers\FakeCommandRuntime.cs" />
<Compile Include="Helpers\FakeErrorRecordFactory.cs" />
<Compile Include="Helpers\TestableGetPackageCmdlet.cs" />
<Compile Include="Src\GetPackageCmdletTests.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj">
<Project>{2748AD25-9C63-4E12-877B-4DCE96FBED54}</Project>
<Name>ICSharpCode.SharpDevelop</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\..\Main\Core\Project\ICSharpCode.Core.csproj">
<Project>{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}</Project>
<Name>ICSharpCode.Core</Name>
</ProjectReference>
<ProjectReference Include="..\..\Project\PackageManagement.csproj">
<Project>{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1}</Project>
<Name>PackageManagement</Name>
</ProjectReference>
<ProjectReference Include="..\..\Test\PackageManagement.Tests.csproj">
<Project>{56E98A01-8398-4A08-9578-C7337711A52B}</Project>
<Name>PackageManagement.Tests</Name>
</ProjectReference>
<ProjectReference Include="..\Project\PackageManagement.Cmdlets.csproj">
<Project>{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}</Project>
<Name>PackageManagement.Cmdlets</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Folder Include="Helpers" />
<Folder Include="Src" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
</Project>

569
src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/GetPackageCmdletTests.cs

@ -0,0 +1,569 @@ @@ -0,0 +1,569 @@
// 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 NuGet;
using NUnit.Framework;
using PackageManagement.Cmdlets.Tests.Helpers;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Cmdlets.Tests
{
[TestFixture]
public class GetPackageCmdletTests
{
TestableGetPackageCmdlet cmdlet;
FakePackageManagementService packageManagementService;
FakePackageManagementConsoleHost consoleHost;
FakeCommandRuntime commandRuntime;
FakeErrorRecordFactory errorRecordFactory;
void CreateCmdlet()
{
cmdlet = new TestableGetPackageCmdlet();
packageManagementService = cmdlet.FakePackageManagementService;
consoleHost = cmdlet.FakePackageManagementConsoleHost;
commandRuntime = cmdlet.FakeCommandRuntime;
errorRecordFactory = cmdlet.FakeErrorRecordFactory;
}
void RunCmdlet()
{
cmdlet.RunProcessRecord();
}
void EnableListAvailableParameter()
{
cmdlet.ListAvailable = new SwitchParameter(true);
}
void EnableUpdatesParameter()
{
cmdlet.Updates = new SwitchParameter(true);
}
TestableProject AddDefaultProjectToConsoleHost()
{
var project = ProjectHelper.CreateTestProject();
consoleHost.DefaultProject = project;
return project;
}
PackageSource AddPackageSourceToConsoleHost()
{
var source = new PackageSource("Test");
consoleHost.ActivePackageSource = source;
return source;
}
FakePackage AddPackageToProjectManagerLocalRepository(string version)
{
return AddPackageToProjectManagerLocalRepository("Test", version);
}
FakePackage AddPackageToProjectManagerLocalRepository(string id, string version)
{
var package = FakePackage.CreatePackageWithVersion(id, version);
packageManagementService
.FakeProjectManagerToReturnFromCreateProjectManager
.FakeLocalRepository
.FakePackages.Add(package);
return package;
}
FakePackage AddPackageToAggregateRepository(string version)
{
return AddPackageToAggregateRepository("Test", version);
}
FakePackage AddPackageToAggregateRepository(string id, string version)
{
return packageManagementService.AddFakePackageWithVersionToAggregrateRepository(id, version);
}
void SetFilterParameter(string filter)
{
cmdlet.Filter = filter;
}
void SetSourceParameter(string source)
{
cmdlet.Source = source;
}
void EnableRecentParameter()
{
cmdlet.Recent = new SwitchParameter(true);
}
void SetSkipParameter(int skip)
{
cmdlet.Skip = skip;
}
void SetTakeParameter(int take)
{
cmdlet.Take = take;
}
[Test]
public void ProcessRecord_ListAvailablePackagesWhenDefaultPackageSourceHasOnePackage_OutputIsPackagesFromPackageSourceRepository()
{
CreateCmdlet();
var repository = packageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
repository.AddOneFakePackage("Test");
EnableListAvailableParameter();
RunCmdlet();
var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = repository.FakePackages;
CollectionAssert.AreEqual(expectedPackages, actualPackages);
}
[Test]
public void ProcessRecord_ListAvailablePackagesWhenDefaultPackageSourceHasThreePackages_OutputIsPackagesFromPackageSourceRepository()
{
CreateCmdlet();
var repository = packageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
repository.AddOneFakePackage("A");
repository.AddOneFakePackage("B");
repository.AddOneFakePackage("C");
EnableListAvailableParameter();
RunCmdlet();
var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = repository.FakePackages;
CollectionAssert.AreEqual(expectedPackages, actualPackages);
}
[Test]
public void ProcessRecord_ListAvailablePackagesWhenDefaultPackageSourceHasTwoPackages_PackagesAreSortedById()
{
CreateCmdlet();
var repository = packageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
var packageB = repository.AddOneFakePackage("B");
var packageA = repository.AddOneFakePackage("A");
EnableListAvailableParameter();
RunCmdlet();
var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = new FakePackage[] {
packageA,
packageB
};
CollectionAssert.AreEqual(expectedPackages, actualPackages);
}
[Test]
public void ProcessRecord_ListAvailablePackagesWhenNoPackageSourceSpecified_PackageSourceTakenFromConsoleHost()
{
CreateCmdlet();
var source = AddPackageSourceToConsoleHost();
EnableListAvailableParameter();
RunCmdlet();
var actualSource = packageManagementService.PackageSourcePassedToCreatePackageRepository;
Assert.AreEqual(source, actualSource);
}
[Test]
public void ProcessRecord_NoParametersPassed_ReturnsPackagesInstalledForProjectSelectedInConsole()
{
CreateCmdlet();
AddDefaultProjectToConsoleHost();
FakeProjectManager projectManager = packageManagementService.FakeProjectManagerToReturnFromCreateProjectManager;
projectManager.FakeLocalRepository.AddOneFakePackage("One");
projectManager.FakeLocalRepository.AddOneFakePackage("Two");
RunCmdlet();
var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = projectManager.FakeLocalRepository.FakePackages;
Assert.AreEqual(expectedPackages, actualPackages);
}
[Test]
public void ProcessRecord_NoParametersPassed_SelectedActivePackageSourceInConsoleHostUsedToCreateRepository()
{
CreateCmdlet();
var source = AddPackageSourceToConsoleHost();
RunCmdlet();
var actualSource = packageManagementService.PackageSourcePassedToCreatePackageRepository;
Assert.AreEqual(source, actualSource);
}
[Test]
public void ProcessRecord_NoParametersPassed_SelectedActiveRepositoryInConsoleHostUsedToCreateProjectManager()
{
CreateCmdlet();
AddPackageSourceToConsoleHost();
RunCmdlet();
var actualRepository = packageManagementService.PackageRepositoryPassedToCreateProjectManager;
var expectedRepository = packageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
Assert.AreEqual(expectedRepository, actualRepository);
}
[Test]
public void ProcessRecord_NoParametersPassed_DefaultProjectInConsoleHostUsedToCreateProjectManager()
{
CreateCmdlet();
AddPackageSourceToConsoleHost();
var project = AddDefaultProjectToConsoleHost();
RunCmdlet();
var actualProject = packageManagementService.ProjectPassedToCreateProjectManager;
Assert.AreEqual(project, actualProject);
}
[Test]
public void ProcessRecord_UpdatedPackagesRequested_ReturnsUpdatedPackagesForActiveProject()
{
CreateCmdlet();
AddDefaultProjectToConsoleHost();
AddPackageToProjectManagerLocalRepository("1.0.0.0");
var updatedPackage = AddPackageToAggregateRepository("1.1.0.0");
EnableUpdatesParameter();
RunCmdlet();
var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = new FakePackage[] {
updatedPackage
};
CollectionAssert.AreEqual(expectedPackages, actualPackages);
}
[Test]
public void ProcessRecord_UpdatedPackagesRequested_ActiveProjectWhenCreatingProjectManager()
{
CreateCmdlet();
var project = AddDefaultProjectToConsoleHost();
EnableUpdatesParameter();
RunCmdlet();
var actualProject = packageManagementService.ProjectPassedToCreateProjectManager;
Assert.AreEqual(project, actualProject);
}
[Test]
public void ProcessRecord_UpdatedPackagesRequested_AggregateRepositoryUsedWhenCreatingProjectManager()
{
CreateCmdlet();
AddDefaultProjectToConsoleHost();
EnableUpdatesParameter();
RunCmdlet();
var actualRepository = packageManagementService.PackageRepositoryPassedToCreateProjectManager;
var expectedRepository = packageManagementService.FakeAggregateRepository;
Assert.AreEqual(expectedRepository, actualRepository);
}
[Test]
public void ProcessRecord_ListAvailablePackagesAndFilterResults_PackagesReturnedMatchFilter()
{
CreateCmdlet();
var repository = packageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
repository.AddOneFakePackage("A");
var package = repository.AddOneFakePackage("B");
repository.AddOneFakePackage("C");
EnableListAvailableParameter();
SetFilterParameter("B");
RunCmdlet();
var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = new FakePackage[] {
package
};
CollectionAssert.AreEqual(expectedPackages, actualPackages);
}
[Test]
public void ProcessRecord_FilterParameterPassed_InstallPackagesAreFiltered()
{
CreateCmdlet();
AddPackageSourceToConsoleHost();
FakeProjectManager projectManager = packageManagementService.FakeProjectManagerToReturnFromCreateProjectManager;
projectManager.FakeLocalRepository.AddOneFakePackage("A");
var package = projectManager.FakeLocalRepository.AddOneFakePackage("B");
SetFilterParameter("B");
RunCmdlet();
var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = new FakePackage[] {
package
};
Assert.AreEqual(expectedPackages, actualPackages);
}
[Test]
public void ProcessRecord_UpdatedPackagesRequestedWithFilter_ReturnsFilteredUpdatedPackages()
{
CreateCmdlet();
AddDefaultProjectToConsoleHost();
AddPackageToProjectManagerLocalRepository("A", "1.0.0.0");
AddPackageToAggregateRepository("A", "1.1.0.0");
AddPackageToProjectManagerLocalRepository("B", "2.0.0.0");
var updatedPackage = AddPackageToAggregateRepository("B", "2.1.0.0");
EnableUpdatesParameter();
SetFilterParameter("B");
RunCmdlet();
var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = new FakePackage[] {
updatedPackage
};
CollectionAssert.AreEqual(expectedPackages, actualPackages);
}
[Test]
public void ProcessRecord_ListAvailablePackagesWhenPackageSourceParameterSpecified_PackageRepositoryCreatedForPackageSourceSpecifiedByParameter()
{
CreateCmdlet();
var repository = packageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
SetSourceParameter("http://sharpdevelop.com/packages");
EnableListAvailableParameter();
RunCmdlet();
var actualPackageSource = packageManagementService.PackageSourcePassedToCreatePackageRepository;
var expectedPackageSource = new PackageSource("http://sharpdevelop.com/packages");
Assert.AreEqual(expectedPackageSource, actualPackageSource);
}
[Test]
public void ProcessRecord_JustSourceParameterPassed_PackageRepositoryCreatedForPackageSourceSpecifiedByParameter()
{
CreateCmdlet();
SetSourceParameter("http://test");
RunCmdlet();
var actualPackageSource = packageManagementService.PackageSourcePassedToCreatePackageRepository;
var expectedPackageSource = new PackageSource("http://test");
Assert.AreEqual(expectedPackageSource, actualPackageSource);
}
[Test]
public void ProcessRecord_RecentPackagesRequested_RecentPackagesReturned()
{
CreateCmdlet();
var recentPackageRepository = packageManagementService.FakeRecentPackageRepository;
recentPackageRepository.AddOneFakePackage("A");
EnableRecentParameter();
RunCmdlet();
var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = recentPackageRepository.FakePackages;
Assert.AreEqual(expectedPackages, actualPackages);
}
[Test]
public void ProcessRecord_RecentPackagesRequestedWithFilter_FilteredRecentPackagesReturned()
{
CreateCmdlet();
var recentPackageRepository = packageManagementService.FakeRecentPackageRepository;
recentPackageRepository.AddOneFakePackage("A");
var packageB = recentPackageRepository.AddOneFakePackage("B");
EnableRecentParameter();
SetFilterParameter("B");
RunCmdlet();
var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = new FakePackage[] {
packageB
};
Assert.AreEqual(expectedPackages, actualPackages);
}
[Test]
public void ProcessRecord_FilterParameterPassedContainingTwoSearchTermsSeparatedBySpaceCharacter_InstallPackagesAreFilteredByBothSearchTerms()
{
CreateCmdlet();
AddPackageSourceToConsoleHost();
FakeProjectManager projectManager = packageManagementService.FakeProjectManagerToReturnFromCreateProjectManager;
var packageA = projectManager.FakeLocalRepository.AddOneFakePackage("A");
var packageB = projectManager.FakeLocalRepository.AddOneFakePackage("B");
var packageC = projectManager.FakeLocalRepository.AddOneFakePackage("C");
SetFilterParameter("B C");
RunCmdlet();
var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = new FakePackage[] {
packageB,
packageC
};
Assert.AreEqual(expectedPackages, actualPackages);
}
[Test]
public void ProcessRecord_RetrieveUpdatesWhenNoProjectIsOpen_ThrowsTerminatingError()
{
CreateCmdlet();
EnableUpdatesParameter();
RunCmdlet();
Assert.IsTrue(cmdlet.IsThrowTerminatingErrorCalled);
}
[Test]
public void ProcessRecord_RetrieveUpdatesWhenProjectIsActive_DoesNotThrowTerminatingError()
{
CreateCmdlet();
AddDefaultProjectToConsoleHost();
EnableUpdatesParameter();
RunCmdlet();
Assert.IsFalse(cmdlet.IsThrowTerminatingErrorCalled);
}
[Test]
public void ProcessRecord_RetrieveUpdatesWhenNoProjectIsOpen_ThrowsNoProjectOpenTerminatingError()
{
CreateCmdlet();
EnableUpdatesParameter();
RunCmdlet();
var actual = cmdlet.ErrorRecordPassedToThrowTerminatingError;
var expected = errorRecordFactory.ErrorRecordToReturnFromCreateNoProjectOpenErrorRecord;
Assert.AreEqual(expected, actual);
}
[Test]
public void ProcessRecord_NoParametersSetAndNoProjectIsOpen_ThrowsNoProjectOpenTerminatingError()
{
CreateCmdlet();
RunCmdlet();
var actual = cmdlet.ErrorRecordPassedToThrowTerminatingError;
var expected = errorRecordFactory.ErrorRecordToReturnFromCreateNoProjectOpenErrorRecord;
Assert.AreEqual(expected, actual);
}
[Test]
public void ProcessRecord_ListAvailablePackagesAndProjectIsNotOpen_NoTerminatingErrorIsThrown()
{
CreateCmdlet();
EnableListAvailableParameter();
RunCmdlet();
bool result = cmdlet.IsThrowTerminatingErrorCalled;
Assert.IsFalse(result);
}
[Test]
public void ProcessRecord_RecentPackagesRequestedAndProjectIsNotOpen_NoTerminatingErrorIsThrown()
{
CreateCmdlet();
EnableRecentParameter();
RunCmdlet();
bool result = cmdlet.IsThrowTerminatingErrorCalled;
Assert.IsFalse(result);
}
[Test]
public void ProcessRecord_ListAvailableAndSkipFirstTwoPackages_ReturnsAllPackagesExceptionFirstTwo()
{
CreateCmdlet();
var repository = packageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
repository.AddOneFakePackage("A");
repository.AddOneFakePackage("B");
var packageC = repository.AddOneFakePackage("C");
EnableListAvailableParameter();
SetSkipParameter(2);
RunCmdlet();
var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = new FakePackage[] {
packageC
};
CollectionAssert.AreEqual(expectedPackages, actualPackages);
}
[Test]
public void Skip_NewGetPackageCmdletInstance_ReturnsZero()
{
CreateCmdlet();
int skip = cmdlet.Skip;
Assert.AreEqual(0, skip);
}
[Test]
public void ProcessRecord_ListAvailableAndTakeTwo_ReturnsFirstTwoPackages()
{
CreateCmdlet();
var repository = packageManagementService.FakePackageRepositoryToReturnFromCreatePackageRepository;
var packageA = repository.AddOneFakePackage("A");
var packageB = repository.AddOneFakePackage("B");
repository.AddOneFakePackage("C");
EnableListAvailableParameter();
SetTakeParameter(2);
RunCmdlet();
var actualPackages = commandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = new FakePackage[] {
packageA,
packageB
};
CollectionAssert.AreEqual(expectedPackages, actualPackages);
}
[Test]
public void Take_NewGetPackageCmdletInstance_ReturnsZero()
{
CreateCmdlet();
int take = cmdlet.Take;
Assert.AreEqual(0, take);
}
}
}

20
src/AddIns/Misc/PackageManagement/PackageManagement.sln

@ -28,6 +28,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Scripting", ".. @@ -28,6 +28,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Scripting", "..
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Scripting.Tests", "..\..\BackendBindings\Scripting\Test\ICSharpCode.Scripting.Tests.csproj", "{85C09AD8-183B-403A-869A-7226646218A9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManagement.Cmdlets", "Cmdlets\Project\PackageManagement.Cmdlets.csproj", "{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManagement.Cmdlets.Tests", "Cmdlets\Test\PackageManagement.Cmdlets.Tests.csproj", "{11115C83-3DB1-431F-8B98-59040359238D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
@ -132,5 +136,21 @@ Global @@ -132,5 +136,21 @@ Global
{85C09AD8-183B-403A-869A-7226646218A9}.Release|x86.ActiveCfg = Release|x86
{85C09AD8-183B-403A-869A-7226646218A9}.Release|Any CPU.Build.0 = Release|x86
{85C09AD8-183B-403A-869A-7226646218A9}.Release|Any CPU.ActiveCfg = Release|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Debug|x86.Build.0 = Debug|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Debug|x86.ActiveCfg = Debug|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Debug|Any CPU.Build.0 = Debug|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Debug|Any CPU.ActiveCfg = Debug|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Release|x86.Build.0 = Release|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Release|x86.ActiveCfg = Release|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Release|Any CPU.Build.0 = Release|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Release|Any CPU.ActiveCfg = Release|x86
{11115C83-3DB1-431F-8B98-59040359238D}.Debug|x86.Build.0 = Debug|x86
{11115C83-3DB1-431F-8B98-59040359238D}.Debug|x86.ActiveCfg = Debug|x86
{11115C83-3DB1-431F-8B98-59040359238D}.Debug|Any CPU.Build.0 = Debug|x86
{11115C83-3DB1-431F-8B98-59040359238D}.Debug|Any CPU.ActiveCfg = Debug|x86
{11115C83-3DB1-431F-8B98-59040359238D}.Release|x86.Build.0 = Release|x86
{11115C83-3DB1-431F-8B98-59040359238D}.Release|x86.ActiveCfg = Release|x86
{11115C83-3DB1-431F-8B98-59040359238D}.Release|Any CPU.Build.0 = Release|x86
{11115C83-3DB1-431F-8B98-59040359238D}.Release|Any CPU.ActiveCfg = Release|x86
EndGlobalSection
EndGlobal

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

@ -54,6 +54,8 @@ @@ -54,6 +54,8 @@
</ItemGroup>
<ItemGroup>
<Folder Include="Configuration" />
<Folder Include="Scripts" />
<Folder Include="Scripts" />
<Folder Include="Resources" />
<Folder Include="Src" />
<Folder Include="Src\Design" />
@ -138,7 +140,9 @@ @@ -138,7 +140,9 @@
<SubType>Code</SubType>
</Compile>
<Compile Include="Src\PackagesViewModel.cs" />
<Compile Include="Src\PackageUpdatesViewModel.cs" />
<Compile Include="Src\Scripting\ErrorRecordFactory.cs" />
<Compile Include="Src\Scripting\IErrorRecordFactory.cs" />
<Compile Include="Src\UpdatedPackagesViewModel.cs" />
<Compile Include="Src\PackageViewModel.cs" />
<Compile Include="Src\PackageViewModelFactory.cs" />
<Compile Include="Src\Page.cs" />
@ -153,10 +157,12 @@ @@ -153,10 +157,12 @@
<Compile Include="Src\RecentPackagesViewModel.cs" />
<Compile Include="Src\RegisteredPackageSource.cs" />
<Compile Include="Src\RegisteredPackageSources.cs" />
<Compile Include="Src\Scripting\IPackageManagementAddInPath.cs" />
<Compile Include="Src\Scripting\IPackageManagementConsoleHost.cs" />
<Compile Include="Src\Scripting\IPowerShellHost.cs" />
<Compile Include="Src\Scripting\IPowerShellHostFactory.cs" />
<Compile Include="Src\Scripting\IThread.cs" />
<Compile Include="Src\Scripting\PackageManagementAddInPath.cs" />
<Compile Include="Src\Scripting\PackageManagementConsole.cs" />
<Compile Include="Src\Scripting\PackageManagementConsoleHost.cs" />
<Compile Include="Src\Scripting\PackageManagementConsolePad.cs" />
@ -178,6 +184,7 @@ @@ -178,6 +184,7 @@
<Compile Include="Src\SharpDevelopProjectSystem.cs" />
<Compile Include="Src\SharpDevelopProjectSystemFactory.cs" />
<Compile Include="Src\StringToStringCollectionConverter.cs" />
<Compile Include="Src\UpdatedPackages.cs" />
<Compile Include="Src\ViewModelBase.cs" />
<Compile Include="Src\ViewModelLocator.cs" />
</ItemGroup>
@ -224,6 +231,9 @@ @@ -224,6 +231,9 @@
<None Include="PackageManagement.addin">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="Scripts\Package.Format.ps1xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<Resource Include="Resources\packageicon.png" />
<Resource Include="Resources\magnifier.png" />
<Resource Include="Resources\resultset_next.png" />

41
src/AddIns/Misc/PackageManagement/Project/Scripts/Package.Format.ps1xml

@ -0,0 +1,41 @@ @@ -0,0 +1,41 @@
<Configuration>
<ViewDefinitions>
<View>
<Name>IPackage.Table</Name>
<ViewSelectedBy>
<TypeName>NuGet.DataServicePackage</TypeName>
<TypeName>NuGet.ZipPackage</TypeName>
</ViewSelectedBy>
<TableControl>
<TableHeaders>
<TableColumnHeader>
<Label>Id</Label>
<Width>35</Width>
</TableColumnHeader>
<TableColumnHeader>
<Label>Version</Label>
<Width>18</Width>
</TableColumnHeader>
<TableColumnHeader>
<Label>Description</Label>
</TableColumnHeader>
</TableHeaders>
<TableRowEntries>
<TableRowEntry>
<TableColumnItems>
<TableColumnItem>
<PropertyName>Id</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>Version</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>Description</PropertyName>
</TableColumnItem>
</TableColumnItems>
</TableRowEntry>
</TableRowEntries>
</TableControl>
</View>
</ViewDefinitions>
</Configuration>

2
src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceView.xaml

@ -65,7 +65,7 @@ @@ -65,7 +65,7 @@
<TabItem Header="Updates">
<pm:PackagesView
x:Name="packageUpdatesView"
DataContext="{Binding Path=PackageUpdatesViewModel}"/>
DataContext="{Binding Path=UpdatedPackagesViewModel}"/>
</TabItem>
<TabItem Header="Recent">
<pm:PackagesView

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

@ -13,7 +13,7 @@ namespace ICSharpCode.PackageManagement @@ -13,7 +13,7 @@ namespace ICSharpCode.PackageManagement
IPackageManagementService packageManagementService;
InstalledPackagesViewModel installedPackagesViewModel;
AvailablePackagesViewModel availablePackagesViewModel;
PackageUpdatesViewModel packageUpdatesViewModel;
UpdatedPackagesViewModel updatedPackagesViewModel;
RecentPackagesViewModel recentPackagesViewModel;
string message;
bool hasError;
@ -27,12 +27,12 @@ namespace ICSharpCode.PackageManagement @@ -27,12 +27,12 @@ namespace ICSharpCode.PackageManagement
availablePackagesViewModel = new AvailablePackagesViewModel(packageManagementService, this, taskFactory);
installedPackagesViewModel = new InstalledPackagesViewModel(packageManagementService, this, taskFactory);
packageUpdatesViewModel = new PackageUpdatesViewModel(packageManagementService, this, taskFactory);
updatedPackagesViewModel = new UpdatedPackagesViewModel(packageManagementService, this, taskFactory);
recentPackagesViewModel = new RecentPackagesViewModel(packageManagementService, this, taskFactory);
availablePackagesViewModel.ReadPackages();
installedPackagesViewModel.ReadPackages();
packageUpdatesViewModel.ReadPackages();
updatedPackagesViewModel.ReadPackages();
recentPackagesViewModel.ReadPackages();
}
@ -44,8 +44,8 @@ namespace ICSharpCode.PackageManagement @@ -44,8 +44,8 @@ namespace ICSharpCode.PackageManagement
get { return availablePackagesViewModel; }
}
public PackageUpdatesViewModel PackageUpdatesViewModel {
get { return packageUpdatesViewModel; }
public UpdatedPackagesViewModel UpdatedPackagesViewModel {
get { return updatedPackagesViewModel; }
}
public RecentPackagesViewModel RecentPackagesViewModel {

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

@ -33,6 +33,21 @@ namespace ICSharpCode.PackageManagement.Design @@ -33,6 +33,21 @@ namespace ICSharpCode.PackageManagement.Design
this.Version = new Version(1, 0, 0, 0);
}
public static FakePackage CreatePackageWithVersion(string version)
{
return CreatePackageWithVersion("Test", version);
}
public static FakePackage CreatePackageWithVersion(string id, string version)
{
var package = new FakePackage() {
Id = id,
Description = String.Empty,
Version = new Version(version)
};
return package;
}
public string Id { get; set; }
public Version Version { get; set; }
public string Title { get; set; }

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

@ -5,6 +5,7 @@ using System; @@ -5,6 +5,7 @@ using System;
using System.Collections.Generic;
using ICSharpCode.Core;
using ICSharpCode.PackageManagement;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
namespace ICSharpCode.PackageManagement.Design
@ -143,5 +144,38 @@ namespace ICSharpCode.PackageManagement.Design @@ -143,5 +144,38 @@ namespace ICSharpCode.PackageManagement.Design
public IPackageRepository RecentPackageRepository {
get { return FakeRecentPackageRepository; }
}
public FakePackageRepository FakePackageRepositoryToReturnFromCreatePackageRepository = new FakePackageRepository();
public PackageSource PackageSourcePassedToCreatePackageRepository;
public IPackageRepository CreatePackageRepository(PackageSource source)
{
PackageSourcePassedToCreatePackageRepository = source;
return FakePackageRepositoryToReturnFromCreatePackageRepository;
}
public FakeProjectManager FakeProjectManagerToReturnFromCreateProjectManager = new FakeProjectManager();
public IPackageRepository PackageRepositoryPassedToCreateProjectManager;
public MSBuildBasedProject ProjectPassedToCreateProjectManager;
public ISharpDevelopProjectManager CreateProjectManager(IPackageRepository repository, MSBuildBasedProject project)
{
PackageRepositoryPassedToCreateProjectManager = repository;
ProjectPassedToCreateProjectManager = project;
return FakeProjectManagerToReturnFromCreateProjectManager;
}
public FakePackage AddFakePackageWithVersionToAggregrateRepository(string version)
{
return AddFakePackageWithVersionToAggregrateRepository("Test", version);
}
public FakePackage AddFakePackageWithVersionToAggregrateRepository(string id, string version)
{
var package = FakePackage.CreatePackageWithVersion(id, version);
FakeAggregateRepository.FakePackages.Add(package);
return package;
}
}
}

7
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageRepository.cs

@ -34,5 +34,12 @@ namespace ICSharpCode.PackageManagement.Design @@ -34,5 +34,12 @@ namespace ICSharpCode.PackageManagement.Design
}
public string Source { get; set; }
public FakePackage AddOneFakePackage(string packageId)
{
var package = new FakePackage(packageId);
FakePackages.Add(package);
return package;
}
}
}

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

@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
namespace ICSharpCode.PackageManagement
@ -13,6 +14,9 @@ namespace ICSharpCode.PackageManagement @@ -13,6 +14,9 @@ namespace ICSharpCode.PackageManagement
event EventHandler PackageUninstalled;
IPackageRepository CreateAggregatePackageRepository();
IPackageRepository CreatePackageRepository(PackageSource source);
ISharpDevelopProjectManager CreateProjectManager(IPackageRepository repository, MSBuildBasedProject project);
IPackageRepository ActivePackageRepository { get; }
IProjectManager ActiveProjectManager { get; }
IPackageRepository RecentPackageRepository { get; }

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

@ -115,18 +115,6 @@ namespace ICSharpCode.PackageManagement @@ -115,18 +115,6 @@ namespace ICSharpCode.PackageManagement
return packageManager.ProjectManager;
}
public void InstallPackage(
IPackageRepository packageRepository,
IPackage package,
IEnumerable<PackageOperation> operations)
{
ISharpDevelopPackageManager packageManager = CreatePackageManager(packageRepository);
packageManager.InstallPackage(package, operations);
projectService.RefreshProjectBrowser();
RecentPackageRepository.AddPackage(package);
OnPackageInstalled();
}
ISharpDevelopPackageManager CreatePackageManager(IPackageRepository packageRepository)
{
MSBuildBasedProject project = projectService.CurrentProject as MSBuildBasedProject;
@ -135,6 +123,12 @@ namespace ICSharpCode.PackageManagement @@ -135,6 +123,12 @@ namespace ICSharpCode.PackageManagement
return packageManager;
}
public ISharpDevelopProjectManager CreateProjectManager(IPackageRepository repository, MSBuildBasedProject project)
{
ISharpDevelopPackageManager packageManager = packageManagerFactory.CreatePackageManager(repository, project);
return packageManager.ProjectManager;
}
void ConfigureLogger(ISharpDevelopPackageManager packageManager)
{
packageManager.Logger = outputMessagesView;
@ -145,6 +139,18 @@ namespace ICSharpCode.PackageManagement @@ -145,6 +139,18 @@ namespace ICSharpCode.PackageManagement
projectManager.Project.Logger = outputMessagesView;
}
public void InstallPackage(
IPackageRepository packageRepository,
IPackage package,
IEnumerable<PackageOperation> operations)
{
ISharpDevelopPackageManager packageManager = CreatePackageManager(packageRepository);
packageManager.InstallPackage(package, operations);
projectService.RefreshProjectBrowser();
RecentPackageRepository.AddPackage(package);
OnPackageInstalled();
}
public void UninstallPackage(IPackageRepository repository, IPackage package)
{
ISharpDevelopPackageManager packageManager = CreatePackageManager(repository);
@ -187,7 +193,7 @@ namespace ICSharpCode.PackageManagement @@ -187,7 +193,7 @@ namespace ICSharpCode.PackageManagement
}
}
IPackageRepository CreatePackageRepository(PackageSource source)
public IPackageRepository CreatePackageRepository(PackageSource source)
{
return packageRepositoryCache.CreateRepository(source);
}

20
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/ErrorRecordFactory.cs

@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
// 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;
namespace ICSharpCode.PackageManagement.Scripting
{
public class ErrorRecordFactory : IErrorRecordFactory
{
public ErrorRecord CreateNoProjectOpenErrorRecord()
{
return new ErrorRecord(
new InvalidOperationException("No project is currently open."),
"NoProjectOpen",
ErrorCategory.InvalidOperation,
null);
}
}
}

13
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IErrorRecordFactory.cs

@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
// 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;
namespace ICSharpCode.PackageManagement.Scripting
{
public interface IErrorRecordFactory
{
ErrorRecord CreateNoProjectOpenErrorRecord();
}
}

15
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementAddInPath.cs

@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
// 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;
namespace ICSharpCode.PackageManagement.Scripting
{
public interface IPackageManagementAddInPath
{
string CmdletsAssemblyFileName { get; }
IEnumerable<string> GetPowerShellFormattingFileNames();
}
}

4
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPowerShellHost.cs

@ -2,12 +2,16 @@ @@ -2,12 +2,16 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
namespace ICSharpCode.PackageManagement.Scripting
{
public interface IPowerShellHost
{
IList<string> ModulesToImport { get; }
void SetRemoteSignedExecutionPolicy();
void UpdateFormatting(IEnumerable<string> formattingFiles);
void ExecuteCommand(string command);
}
}

44
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementAddInPath.cs

@ -0,0 +1,44 @@ @@ -0,0 +1,44 @@
// 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 System.IO;
namespace ICSharpCode.PackageManagement.Scripting
{
public class PackageManagementAddInPath : IPackageManagementAddInPath
{
string cmdletsAssemblyFileName;
public string CmdletsAssemblyFileName {
get {
if (cmdletsAssemblyFileName == null) {
GetCmdletsAssemblyFileName();
}
return cmdletsAssemblyFileName;
}
}
void GetCmdletsAssemblyFileName()
{
cmdletsAssemblyFileName = Path.Combine(AddInDirectory, "PackageManagement.Cmdlets.dll");
}
string AddInDirectory {
get {
string addinFilename = GetType().Assembly.Location;
return Path.GetDirectoryName(addinFilename);
}
}
public IEnumerable<string> GetPowerShellFormattingFileNames()
{
return Directory.GetFiles(PowerShellScriptsDirectory, "*.ps1xml");
}
string PowerShellScriptsDirectory {
get { return Path.Combine(AddInDirectory, "Scripts"); }
}
}
}

25
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs

@ -2,7 +2,9 @@ @@ -2,7 +2,9 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.Threading;
using ICSharpCode.AvalonEdit;
using ICSharpCode.Scripting;
using ICSharpCode.SharpDevelop.Project;
@ -15,16 +17,20 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -15,16 +17,20 @@ namespace ICSharpCode.PackageManagement.Scripting
IThread thread;
IPowerShellHostFactory powerShellHostFactory;
IPowerShellHost powerShellHost;
IPackageManagementAddInPath addinPath;
int autoIndentSize = 0;
string prompt = "PM> ";
public PackageManagementConsoleHost(IPowerShellHostFactory powerShellHostFactory)
public PackageManagementConsoleHost(
IPowerShellHostFactory powerShellHostFactory,
IPackageManagementAddInPath addinPath)
{
this.powerShellHostFactory = powerShellHostFactory;
this.addinPath = addinPath;
}
public PackageManagementConsoleHost()
: this(new PowerShellHostFactory())
: this(new PowerShellHostFactory(), new PackageManagementAddInPath())
{
}
@ -69,7 +75,15 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -69,7 +75,15 @@ namespace ICSharpCode.PackageManagement.Scripting
void InitPowerShell()
{
CreatePowerShellHost();
AddModulesToImport();
powerShellHost.SetRemoteSignedExecutionPolicy();
UpdateFormatting();
}
void UpdateFormatting()
{
IEnumerable<string> fileNames = addinPath.GetPowerShellFormattingFileNames();
powerShellHost.UpdateFormatting(fileNames);
}
void CreatePowerShellHost()
@ -77,10 +91,15 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -77,10 +91,15 @@ namespace ICSharpCode.PackageManagement.Scripting
powerShellHost = powerShellHostFactory.CreatePowerShellHost(ScriptingConsole);
}
void AddModulesToImport()
{
string module = addinPath.CmdletsAssemblyFileName;
powerShellHost.ModulesToImport.Add(module);
}
void WritePrompt()
{
ScriptingConsole.Write(prompt, ScriptingStyle.Prompt);
//textEditor.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate { textEditor.ScrollToEnd(); }));
}
void ProcessUserCommands()

34
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellHost.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 System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Management.Automation.Host;
@ -21,6 +22,7 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -21,6 +22,7 @@ namespace ICSharpCode.PackageManagement.Scripting
Version version = new Version(0, 1);
Runspace runspace;
PowerShellHostUserInterface userInterface;
List<string> modulesToImport = new List<string>();
//SharpDevelopEnvDTE dte = new SharpDevelopEnvDTE();
public PowerShellHost(IScriptingConsole scriptingConsole)
@ -29,9 +31,21 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -29,9 +31,21 @@ namespace ICSharpCode.PackageManagement.Scripting
userInterface = new PowerShellHostUserInterface(scriptingConsole);
}
public IList<string> ModulesToImport {
get { return modulesToImport; }
}
public void SetRemoteSignedExecutionPolicy()
{
ExecuteCommand("Set-ExecutionPolicy RemoteSigned -Scope 0 -Force");
ExecuteCommand("Set-ExecutionPolicy RemoteSigned -Scope 0 -Force");
}
public void UpdateFormatting(IEnumerable<string> formattingFiles)
{
foreach (string file in formattingFiles) {
string command = String.Format("Update-FormatData '{0}'", file);
ExecuteCommand(command);
}
}
public void ExecuteCommand(string command)
@ -59,16 +73,22 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -59,16 +73,22 @@ namespace ICSharpCode.PackageManagement.Scripting
void CreateRunspace()
{
if (runspace == null) {
var initialSessionState = InitialSessionState.CreateDefault();
//var options = ScopedItemOptions.AllScope | ScopedItemOptions.Constant;
//var variable = new SessionStateVariableEntry("DTE", dte, "SharpDevelop DTE object", options);
//initialSessionState.Variables.Add(variable);
runspace = RunspaceFactory.CreateRunspace(this); //, initialSessionState);
InitialSessionState initialSessionState = CreateInitialSessionState();
runspace = RunspaceFactory.CreateRunspace(this, initialSessionState);
runspace.Open();
}
}
InitialSessionState CreateInitialSessionState()
{
var initialSessionState = InitialSessionState.CreateDefault();
initialSessionState.ImportPSModule(modulesToImport.ToArray());
//var options = ScopedItemOptions.AllScope | ScopedItemOptions.Constant;
//var variable = new SessionStateVariableEntry("DTE", dte, "SharpDevelop DTE object", options);
//initialSessionState.Variables.Add(variable);
return initialSessionState;
}
public override Version Version {
get { return version; }
}

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

@ -2,15 +2,21 @@ @@ -2,15 +2,21 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.PackageManagement.Scripting;
namespace ICSharpCode.PackageManagement
{
public class ServiceLocator
public static class ServiceLocator
{
static readonly PackageManagementService packageManagementService = new PackageManagementService();
static readonly PackageManagementConsoleHost packageManagementConsoleHost = new PackageManagementConsoleHost();
public static IPackageManagementService PackageManagementService {
get { return packageManagementService; }
}
public static IPackageManagementConsoleHost PackageManagementConsoleHost {
get { return packageManagementConsoleHost; }
}
}
}

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

@ -0,0 +1,78 @@ @@ -0,0 +1,78 @@
// 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 System.Linq;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
namespace ICSharpCode.PackageManagement
{
public class UpdatedPackages
{
IPackageManagementService packageManagementService;
MSBuildBasedProject project;
IPackageRepository localRepository;
IPackageRepository sourceRepository;
public UpdatedPackages(IPackageManagementService packageManagementService)
: this(packageManagementService, null)
{
}
public UpdatedPackages(
IPackageManagementService packageManagementService,
MSBuildBasedProject project)
{
this.packageManagementService = packageManagementService;
this.project = project;
GetRepositories();
}
void GetRepositories()
{
GetSourceRepository();
GetLocalRepository();
}
void GetSourceRepository()
{
sourceRepository = packageManagementService.CreateAggregatePackageRepository();
}
void GetLocalRepository()
{
IProjectManager projectManager = CreateProjectManager();
localRepository = projectManager.LocalRepository;
}
public string SearchTerms { get; set; }
public IEnumerable<IPackage> GetUpdatedPackages()
{
IQueryable<IPackage> localPackages = localRepository.GetPackages();
localPackages = FilterPackages(localPackages);
return GetUpdatedPackages(sourceRepository, localPackages);
}
IQueryable<IPackage> FilterPackages(IQueryable<IPackage> localPackages)
{
return localPackages.Find(SearchTerms);
}
IEnumerable<IPackage> GetUpdatedPackages(IPackageRepository sourceRepository, IQueryable<IPackage> localPackages)
{
return sourceRepository.GetUpdates(localPackages);
}
IProjectManager CreateProjectManager()
{
if (project != null) {
return packageManagementService.CreateProjectManager(sourceRepository, project);
}
return packageManagementService.ActiveProjectManager;
}
}
}

25
src/AddIns/Misc/PackageManagement/Project/Src/PackageUpdatesViewModel.cs → src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackagesViewModel.cs

@ -9,15 +9,13 @@ using NuGet; @@ -9,15 +9,13 @@ using NuGet;
namespace ICSharpCode.PackageManagement
{
public class PackageUpdatesViewModel : PackagesViewModel
public class UpdatedPackagesViewModel : PackagesViewModel
{
List<IPackage> packages = new List<IPackage>();
IPackageManagementService packageManagementService;
IPackageRepository localRepository;
IPackageRepository sourceRepository;
UpdatedPackages updatedPackages;
string errorMessage = String.Empty;
public PackageUpdatesViewModel(
public UpdatedPackagesViewModel(
IPackageManagementService packageManagementService,
IMessageReporter messageReporter,
ITaskFactory taskFactory)
@ -29,31 +27,28 @@ namespace ICSharpCode.PackageManagement @@ -29,31 +27,28 @@ namespace ICSharpCode.PackageManagement
protected override void UpdateRepositoryBeforeReadPackagesTaskStarts()
{
try {
IProjectManager projectManager = packageManagementService.ActiveProjectManager;
localRepository = projectManager.LocalRepository;
updatedPackages = new UpdatedPackages(packageManagementService);
} catch (Exception ex) {
errorMessage = ex.Message;
}
sourceRepository = packageManagementService.CreateAggregatePackageRepository();
}
protected override IQueryable<IPackage> GetAllPackages()
{
if (localRepository == null) {
if (updatedPackages == null) {
ThrowSavedException();
}
IQueryable<IPackage> localPackages = localRepository.GetPackages();
return GetUpdatedPackages(localPackages);
return GetUpdatedPackages();
}
IQueryable<IPackage> GetUpdatedPackages(IQueryable<IPackage> localPackages)
void ThrowSavedException()
{
return sourceRepository.GetUpdates(localPackages).AsQueryable();
throw new ApplicationException(errorMessage);
}
void ThrowSavedException()
IQueryable<IPackage> GetUpdatedPackages()
{
throw new ApplicationException(errorMessage);
return updatedPackages.GetUpdatedPackages().AsQueryable();
}
}
}

4
src/AddIns/Misc/PackageManagement/Project/Src/ViewModelLocator.cs

@ -75,11 +75,11 @@ namespace ICSharpCode.PackageManagement @@ -75,11 +75,11 @@ namespace ICSharpCode.PackageManagement
void CreatePackageManagementConsoleViewModel()
{
CreatePackageManagementService();
var packageManagementConsole = new PackageManagementConsoleHost();
var consoleHost = ServiceLocator.PackageManagementConsoleHost;
packageManagementConsoleViewModel =
new PackageManagementConsoleViewModel(
packageManagementService,
packageManagementConsole);
consoleHost);
}
}
}

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

@ -76,6 +76,7 @@ @@ -76,6 +76,7 @@
<Compile Include="Src\Helpers\FakeLicenseAcceptanceService.cs" />
<Compile Include="Src\Helpers\FakeMessageCategoryView.cs" />
<Compile Include="Src\Helpers\FakeMessageReporter.cs" />
<Compile Include="Src\Helpers\FakePackageManagementAddInPath.cs" />
<Compile Include="Src\Helpers\FakePackageManagementConsoleHost.cs" />
<Compile Include="Src\Helpers\FakePackageManager.cs" />
<Compile Include="Src\Helpers\FakePackageManagerFactory.cs" />
@ -131,7 +132,7 @@ @@ -131,7 +132,7 @@
<Compile Include="Src\PackageRepositoryPathsTests.cs" />
<Compile Include="Src\PackageSourceViewModelTests.cs" />
<Compile Include="Src\PackagesViewModelTests.cs" />
<Compile Include="Src\PackageUpdatesViewModelTests.cs" />
<Compile Include="Src\UpdatedPackagesViewModelTests.cs" />
<Compile Include="Src\PackageViewModelTests.cs" />
<Compile Include="Src\PagesTests.cs" />
<Compile Include="Src\RecentPackageInfoTests.cs" />

2
src/AddIns/Misc/PackageManagement/Test/Src/AddPackageReferenceViewModelTests.cs

@ -109,7 +109,7 @@ namespace PackageManagement.Tests @@ -109,7 +109,7 @@ namespace PackageManagement.Tests
List<FakePackage> expectedPackages = fakePackageManagementService.FakeAggregateRepository.FakePackages;
PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageUpdatesViewModel.PackageViewModels);
PackageCollectionAssert.AreEqual(expectedPackages, viewModel.UpdatedPackagesViewModel.PackageViewModels);
}
[Test]

21
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementAddInPath.cs

@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
// 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.Scripting;
namespace PackageManagement.Tests.Helpers
{
public class FakePackageManagementAddInPath : IPackageManagementAddInPath
{
public string CmdletsAssemblyFileName { get; set; }
public List<string> PowerShellFormattingFileNames = new List<string>();
public IEnumerable<string> GetPowerShellFormattingFileNames()
{
return PowerShellFormattingFileNames;
}
}
}

13
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePowerShellHost.cs

@ -24,5 +24,18 @@ namespace PackageManagement.Tests.Helpers @@ -24,5 +24,18 @@ namespace PackageManagement.Tests.Helpers
CommandPassedToExecuteCommand = command;
AllCommandsPassedToExecuteCommand.Add(command);
}
public List<string> modulesToImport = new List<string>();
public IList<string> ModulesToImport {
get { return modulesToImport; }
}
public IEnumerable<string> FormattingFilesPassedToUpdateFormatting;
public void UpdateFormatting(IEnumerable<string> formattingFiles)
{
FormattingFilesPassedToUpdateFormatting = formattingFiles;
}
}
}

12
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageManagementConsoleHost.cs

@ -14,20 +14,26 @@ namespace PackageManagement.Tests.Helpers @@ -14,20 +14,26 @@ namespace PackageManagement.Tests.Helpers
public FakeThread FakeThread = new FakeThread();
public ThreadStart ThreadStartPassedToCreateThread;
public FakePowerShellHostFactory FakePowerShellHostFactory;
public FakePackageManagementAddInPath FakePackageManagementAddInPath;
public TestablePackageManagementConsoleHost()
: this(new FakeScriptingConsoleWithLinesToRead(), new FakePowerShellHostFactory())
: this(
new FakeScriptingConsoleWithLinesToRead(),
new FakePowerShellHostFactory(),
new FakePackageManagementAddInPath())
{
}
public TestablePackageManagementConsoleHost(
FakeScriptingConsoleWithLinesToRead scriptingConsole,
FakePowerShellHostFactory powerShellHostFactory)
: base(powerShellHostFactory)
FakePowerShellHostFactory powerShellHostFactory,
FakePackageManagementAddInPath addinPath)
: base(powerShellHostFactory, addinPath)
{
this.FakeScriptingConsole = scriptingConsole;
this.ScriptingConsole = scriptingConsole;
this.FakePowerShellHostFactory = powerShellHostFactory;
this.FakePackageManagementAddInPath = addinPath;
}
protected override IThread CreateThread(ThreadStart threadStart)

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

@ -484,5 +484,65 @@ namespace PackageManagement.Tests @@ -484,5 +484,65 @@ namespace PackageManagement.Tests
PackageCollectionAssert.AreEqual(expectedPackages, recentPackages);
}
[Test]
public void CreatePackageRepository_PackageSourceSpecified_CreatesPackageRepositoryFromPackageRepositoryFactory()
{
CreatePackageManagementService();
var repository = packageManagementService.CreatePackageRepository(new PackageSource("a"));
var expectedRepository = fakePackageRepositoryFactory.FakePackageRepository;
Assert.AreEqual(expectedRepository, repository);
}
[Test]
public void CreatePackageRepository_PackageSourceSpecified_PackageSourcePassedToPackageRepositoryFactory()
{
CreatePackageManagementService();
var source = new PackageSource("Test");
var repository = packageManagementService.CreatePackageRepository(source);
var actualSource = fakePackageRepositoryFactory.PackageSourcesPassedToCreateRepository.First();
Assert.AreEqual(source, actualSource);
}
[Test]
public void CreateProjectManager_RepositoryAndProjectSpecified_CreatesPackageManagerFromPackageManagerFactory()
{
CreatePackageManagementService();
var repository = new FakePackageRepository();
var project = ProjectHelper.CreateTestProject();
ISharpDevelopProjectManager projectManager = packageManagementService.CreateProjectManager(repository, project);
var expectedProjectManager = fakePackageManagerFactory.FakePackageManager.FakeProjectManager;
Assert.AreEqual(expectedProjectManager, projectManager);
}
[Test]
public void CreateProjectManager_RepositorySpecified_RepositoryUsedToCreateProjectManager()
{
CreatePackageManagementService();
var repository = new FakePackageRepository();
packageManagementService.CreateProjectManager(repository, null);
var expectedRepository = fakePackageManagerFactory.PackageRepositoryPassedToCreatePackageManager;
Assert.AreEqual(expectedRepository, repository);
}
[Test]
public void CreateProjectManager_ProjectSpecified_ProjectUsedToCreateProjectManager()
{
CreatePackageManagementService();
var project = ProjectHelper.CreateTestProject();
packageManagementService.CreateProjectManager(null, project);
var expectedProject = fakePackageManagerFactory.ProjectPassedToCreateRepository;
Assert.AreEqual(expectedProject, project);
}
}
}

34
src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostTests.cs

@ -167,5 +167,39 @@ namespace PackageManagement.Tests.Scripting @@ -167,5 +167,39 @@ namespace PackageManagement.Tests.Scripting
Assert.AreEqual(commands, powerShellHost.AllCommandsPassedToExecuteCommand);
}
[Test]
public void Run_PowerShellHostInitialization_CmdletsAreImported()
{
CreateHost();
string cmdletsAssemblyFileName =
@"d:\program files\SharpDevelop\4.0\AddIns\PackageManagement\PackageManagement.Cmdlets.dll";
host.FakePackageManagementAddInPath.CmdletsAssemblyFileName = cmdletsAssemblyFileName;
RunHost();
var expectedModules = new string[] {
cmdletsAssemblyFileName
};
var actualModules = powerShellHost.ModulesToImport;
CollectionAssert.AreEqual(expectedModules, actualModules);
}
[Test]
public void Run_TwoPowerShellFormattingConfigXmlFilesInAddInFolder_UpdateFormattingCalledWithTwoFormattingFiles()
{
CreateHost();
var files = new string[] {
@"d:\program files\SharpDevelop\4.0\AddIns\PackageManagement\Scripting\Package.Format.ps1xml",
@"d:\temp\test\Format.ps1xml"
};
host.FakePackageManagementAddInPath.PowerShellFormattingFileNames.AddRange(files);
RunHost();
var actualFiles = powerShellHost.FormattingFilesPassedToUpdateFormatting;
CollectionAssert.AreEqual(files, actualFiles);
}
}
}

47
src/AddIns/Misc/PackageManagement/Test/Src/PackageUpdatesViewModelTests.cs → src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackagesViewModelTests.cs

@ -10,9 +10,9 @@ using PackageManagement.Tests.Helpers; @@ -10,9 +10,9 @@ using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests
{
[TestFixture]
public class PackageUpdatesViewModelTests
public class UpdatedPackagesViewModelTests
{
PackageUpdatesViewModel viewModel;
UpdatedPackagesViewModel viewModel;
FakePackageManagementService packageManagementService;
FakeTaskFactory taskFactory;
ExceptionThrowingPackageManagementService exceptionThrowingPackageManagementService;
@ -32,7 +32,7 @@ namespace PackageManagement.Tests @@ -32,7 +32,7 @@ namespace PackageManagement.Tests
{
taskFactory = new FakeTaskFactory();
var messageReporter = new FakeMessageReporter();
viewModel = new PackageUpdatesViewModel(packageManagementService, messageReporter, taskFactory);
viewModel = new UpdatedPackagesViewModel(packageManagementService, messageReporter, taskFactory);
}
void CreateExceptionThrowingPackageManagementService()
@ -47,26 +47,14 @@ namespace PackageManagement.Tests @@ -47,26 +47,14 @@ namespace PackageManagement.Tests
FakePackage AddPackageToLocalRepository(string version)
{
var package = CreatePackage(version);
var package = FakePackage.CreatePackageWithVersion(version);
packageManagementService.AddPackageToProjectLocalRepository(package);
return package;
}
FakePackage AddPackageToSourceRepository(string version)
FakePackage AddPackageToAggregateRepository(string version)
{
var package = CreatePackage(version);
packageManagementService.FakeAggregateRepository.FakePackages.Add(package);
return package;
}
FakePackage CreatePackage(string version)
{
var package = new FakePackage() {
Id = "Test",
Description = String.Empty,
Version = new Version(version)
};
return package;
return packageManagementService.AddFakePackageWithVersionToAggregrateRepository(version);
}
[Test]
@ -74,7 +62,7 @@ namespace PackageManagement.Tests @@ -74,7 +62,7 @@ namespace PackageManagement.Tests
{
CreateViewModel();
AddPackageToLocalRepository("1.0.0.0");
var newerPackage = AddPackageToSourceRepository("1.1.0.0");
var newerPackage = AddPackageToAggregateRepository("1.1.0.0");
viewModel.ReadPackages();
CompleteReadPackagesTask();
@ -91,8 +79,8 @@ namespace PackageManagement.Tests @@ -91,8 +79,8 @@ namespace PackageManagement.Tests
{
CreateViewModel();
AddPackageToLocalRepository("1.0.0.0");
AddPackageToSourceRepository("1.0.0.0");
var newerPackage = AddPackageToSourceRepository("1.1.0.0");
AddPackageToAggregateRepository("1.0.0.0");
var newerPackage = AddPackageToAggregateRepository("1.1.0.0");
viewModel.ReadPackages();
CompleteReadPackagesTask();
@ -105,11 +93,11 @@ namespace PackageManagement.Tests @@ -105,11 +93,11 @@ namespace PackageManagement.Tests
}
[Test]
public void ReadPackages_OneNewerPackage_RepositoriesNotCreatedByBackgroundThread()
public void ReadPackages_OneNewerPackageVersionAvailable_RepositoriesNotCreatedByBackgroundThread()
{
CreateViewModel();
AddPackageToLocalRepository("1.0.0.0");
var newerPackage = AddPackageToSourceRepository("1.1.0.0");
var newerPackage = AddPackageToAggregateRepository("1.1.0.0");
viewModel.ReadPackages();
@ -132,18 +120,5 @@ namespace PackageManagement.Tests @@ -132,18 +120,5 @@ namespace PackageManagement.Tests
ApplicationException ex = Assert.Throws<ApplicationException>(() => CompleteReadPackagesTask());
Assert.AreEqual("Test", ex.Message);
}
// [Test]
// public void ReadPackages_ActiveProjectManagerThrowsException_ErrorMessageFromExceptionReturned()
// {
// CreateExceptionThrowingPackageManagementService();
// exceptionThrowingPackageManagementService.ExeptionToThrowWhenActiveProjectManagerAccessed =
// new Exception("Test");
// CreateViewModel(exceptionThrowingPackageManagementService);
// viewModel.ReadPackages();
//
// ApplicationException ex = Assert.Throws<ApplicationException>(() => CompleteReadPackagesTask());
// Assert.AreEqual("Test", ex.Message);
// }
}
}
Loading…
Cancel
Save