15 changed files with 451 additions and 7 deletions
@ -0,0 +1,92 @@ |
|||||||
|
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||||
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
using System.Linq; |
||||||
|
using System.Management.Automation; |
||||||
|
|
||||||
|
using ICSharpCode.PackageManagement.EnvDTE; |
||||||
|
using ICSharpCode.PackageManagement.Scripting; |
||||||
|
using ICSharpCode.SharpDevelop.Project; |
||||||
|
|
||||||
|
namespace ICSharpCode.PackageManagement.Cmdlets |
||||||
|
{ |
||||||
|
[Cmdlet(VerbsCommon.Get, "Project", DefaultParameterSetName = ParameterAttribute.AllParameterSets)] |
||||||
|
public class GetProjectCmdlet : PackageManagementCmdlet |
||||||
|
{ |
||||||
|
public GetProjectCmdlet() |
||||||
|
: this( |
||||||
|
PackageManagementServices.ConsoleHost, |
||||||
|
null) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
public GetProjectCmdlet( |
||||||
|
IPackageManagementConsoleHost consoleHost, |
||||||
|
ICmdletTerminatingError terminatingError) |
||||||
|
: base(consoleHost, terminatingError) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
[Parameter(ParameterSetName = "AllProjects")] |
||||||
|
public SwitchParameter All { get; set; } |
||||||
|
|
||||||
|
[Parameter(ParameterSetName = "ProjectsFilteredByName")] |
||||||
|
public string[] Name { get; set; } |
||||||
|
|
||||||
|
protected override void ProcessRecord() |
||||||
|
{ |
||||||
|
ThrowErrorIfProjectNotOpen(); |
||||||
|
|
||||||
|
if (All.IsPresent) { |
||||||
|
WriteAllProjectsToPipeline(); |
||||||
|
} else if (Name != null) { |
||||||
|
WriteFilteredProjectsToPipeline(); |
||||||
|
} else { |
||||||
|
WriteDefaultProjectToPipeline(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void WriteAllProjectsToPipeline() |
||||||
|
{ |
||||||
|
IEnumerable<Project> allProjects = GetAllProjects(); |
||||||
|
WriteProjectsToPipeline(allProjects); |
||||||
|
} |
||||||
|
|
||||||
|
IEnumerable<Project> GetAllProjects() |
||||||
|
{ |
||||||
|
var projects = new OpenProjects(ConsoleHost); |
||||||
|
return projects.GetAllProjects(); |
||||||
|
} |
||||||
|
|
||||||
|
void WriteProjectsToPipeline(IEnumerable<Project> projects) |
||||||
|
{ |
||||||
|
bool enumerateCollection = true; |
||||||
|
WriteObject(projects, enumerateCollection); |
||||||
|
} |
||||||
|
|
||||||
|
void WriteFilteredProjectsToPipeline() |
||||||
|
{ |
||||||
|
IEnumerable<Project> projects = GetFilteredProjects(); |
||||||
|
WriteProjectsToPipeline(projects); |
||||||
|
} |
||||||
|
|
||||||
|
IEnumerable<Project> GetFilteredProjects() |
||||||
|
{ |
||||||
|
var projects = new OpenProjects(ConsoleHost); |
||||||
|
return projects.GetFilteredProjects(Name); |
||||||
|
} |
||||||
|
|
||||||
|
void WriteDefaultProjectToPipeline() |
||||||
|
{ |
||||||
|
Project project = GetDefaultProject(); |
||||||
|
WriteObject(project); |
||||||
|
} |
||||||
|
|
||||||
|
Project GetDefaultProject() |
||||||
|
{ |
||||||
|
return new Project(DefaultProject); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,52 @@ |
|||||||
|
// 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.EnvDTE; |
||||||
|
using ICSharpCode.PackageManagement.Scripting; |
||||||
|
using ICSharpCode.SharpDevelop.Project; |
||||||
|
|
||||||
|
namespace ICSharpCode.PackageManagement.Cmdlets |
||||||
|
{ |
||||||
|
public class OpenProjects |
||||||
|
{ |
||||||
|
IPackageManagementConsoleHost consoleHost; |
||||||
|
|
||||||
|
public OpenProjects(IPackageManagementConsoleHost consoleHost) |
||||||
|
{ |
||||||
|
this.consoleHost = consoleHost; |
||||||
|
} |
||||||
|
|
||||||
|
public IEnumerable<Project> GetAllProjects() |
||||||
|
{ |
||||||
|
foreach (IProject project in consoleHost.GetOpenProjects()) { |
||||||
|
yield return CreateProject(project); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
Project CreateProject(IProject project) |
||||||
|
{ |
||||||
|
return new Project(project as MSBuildBasedProject); |
||||||
|
} |
||||||
|
|
||||||
|
public IEnumerable<Project> GetFilteredProjects(string[] projectNames) |
||||||
|
{ |
||||||
|
foreach (string projectName in projectNames) { |
||||||
|
WildcardPattern wildcard = CreateWildcard(projectName); |
||||||
|
foreach (Project project in GetAllProjects()) { |
||||||
|
if (wildcard.IsMatch(project.Name)) { |
||||||
|
yield return project; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
WildcardPattern CreateWildcard(string pattern) |
||||||
|
{ |
||||||
|
return new WildcardPattern(pattern, WildcardOptions.IgnoreCase); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -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 PackageManagement.Tests.Helpers; |
||||||
|
|
||||||
|
namespace PackageManagement.Cmdlets.Tests.Helpers |
||||||
|
{ |
||||||
|
public class TestableGetProjectCmdlet : GetProjectCmdlet |
||||||
|
{ |
||||||
|
public FakeCmdletTerminatingError FakeCmdletTerminatingError; |
||||||
|
public FakePackageManagementConsoleHost FakePackageManagementConsoleHost; |
||||||
|
public FakeCommandRuntime FakeCommandRuntime; |
||||||
|
|
||||||
|
public TestableGetProjectCmdlet() |
||||||
|
: this( |
||||||
|
new FakePackageManagementConsoleHost(), |
||||||
|
new FakeCommandRuntime(), |
||||||
|
new FakeCmdletTerminatingError()) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
public TestableGetProjectCmdlet( |
||||||
|
FakePackageManagementConsoleHost consoleHost, |
||||||
|
FakeCommandRuntime commandRuntime, |
||||||
|
FakeCmdletTerminatingError cmdletTerminatingError) |
||||||
|
: base(consoleHost, cmdletTerminatingError) |
||||||
|
{ |
||||||
|
this.FakePackageManagementConsoleHost = consoleHost; |
||||||
|
this.FakeCommandRuntime = commandRuntime; |
||||||
|
this.CommandRuntime = commandRuntime; |
||||||
|
this.FakeCmdletTerminatingError = cmdletTerminatingError; |
||||||
|
} |
||||||
|
|
||||||
|
public void CallProcessRecord() |
||||||
|
{ |
||||||
|
base.ProcessRecord(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,214 @@ |
|||||||
|
// 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.EnvDTE; |
||||||
|
using NUnit.Framework; |
||||||
|
using PackageManagement.Cmdlets.Tests.Helpers; |
||||||
|
using PackageManagement.Tests.Helpers; |
||||||
|
|
||||||
|
namespace PackageManagement.Cmdlets.Tests |
||||||
|
{ |
||||||
|
[TestFixture] |
||||||
|
public class GetProjectCmdletTests : CmdletTestsBase |
||||||
|
{ |
||||||
|
TestableGetProjectCmdlet cmdlet; |
||||||
|
FakeCmdletTerminatingError fakeTerminatingError; |
||||||
|
TestableProject defaultProject; |
||||||
|
FakeCommandRuntime fakeCommandRuntime; |
||||||
|
|
||||||
|
void CreateCmdletWithoutActiveProject() |
||||||
|
{ |
||||||
|
cmdlet = new TestableGetProjectCmdlet(); |
||||||
|
fakeTerminatingError = cmdlet.FakeCmdletTerminatingError; |
||||||
|
} |
||||||
|
|
||||||
|
void CreateCmdlet() |
||||||
|
{ |
||||||
|
cmdlet = new TestableGetProjectCmdlet(); |
||||||
|
fakeTerminatingError = cmdlet.FakeCmdletTerminatingError; |
||||||
|
fakeCommandRuntime = cmdlet.FakeCommandRuntime; |
||||||
|
fakeConsoleHost = cmdlet.FakePackageManagementConsoleHost; |
||||||
|
defaultProject = base.AddDefaultProjectToConsoleHost(); |
||||||
|
} |
||||||
|
|
||||||
|
void RunCmdlet() |
||||||
|
{ |
||||||
|
cmdlet.CallProcessRecord(); |
||||||
|
} |
||||||
|
|
||||||
|
void EnableAllParameter() |
||||||
|
{ |
||||||
|
cmdlet.All = new SwitchParameter(true); |
||||||
|
} |
||||||
|
|
||||||
|
void ProjectCollectionAssertAreEqual(IEnumerable<TestableProject> expectedProjects, IEnumerable<Project> actualProjects) |
||||||
|
{ |
||||||
|
var expectedProjectNames = new List<string>(); |
||||||
|
foreach (TestableProject testableProject in expectedProjects) { |
||||||
|
expectedProjectNames.Add(testableProject.Name); |
||||||
|
} |
||||||
|
|
||||||
|
var actualProjectNames = new List<string>(); |
||||||
|
foreach (Project project in actualProjects) { |
||||||
|
actualProjectNames.Add(project.Name); |
||||||
|
} |
||||||
|
|
||||||
|
CollectionAssert.AreEqual(expectedProjectNames, actualProjectNames); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ProcessRecord_NoActiveProject_ThrowsNoProjectOpenTerminatingError() |
||||||
|
{ |
||||||
|
CreateCmdletWithoutActiveProject(); |
||||||
|
RunCmdlet(); |
||||||
|
|
||||||
|
Assert.IsTrue(fakeTerminatingError.IsThrowNoProjectOpenErrorCalled); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ProcessRecord_HostHasDefaultProject_DTEProjectWrittenToPipeline() |
||||||
|
{ |
||||||
|
CreateCmdlet(); |
||||||
|
defaultProject.Name = "MyProject"; |
||||||
|
RunCmdlet(); |
||||||
|
|
||||||
|
Project project = fakeCommandRuntime.FirstObjectPassedToWriteObject as Project; |
||||||
|
string projectName = project.Name; |
||||||
|
|
||||||
|
Assert.AreEqual("MyProject", projectName); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ProcessRecord_AllParameterSetAndConsoleHostHasTwoProjects_TwoProjectsWrittenToPipeline() |
||||||
|
{ |
||||||
|
CreateCmdlet(); |
||||||
|
EnableAllParameter(); |
||||||
|
|
||||||
|
fakeConsoleHost.AddFakeProject("A"); |
||||||
|
fakeConsoleHost.AddFakeProject("B"); |
||||||
|
|
||||||
|
RunCmdlet(); |
||||||
|
|
||||||
|
var expectedProjects = fakeConsoleHost.FakeOpenProjects; |
||||||
|
var projects = fakeCommandRuntime.FirstObjectPassedToWriteObject as IEnumerable<Project>; |
||||||
|
|
||||||
|
ProjectCollectionAssertAreEqual(expectedProjects, projects); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ProcessRecord_AllParameterSetAndConsoleHostHasTwoProjects_ProjectsWrittenToPipelineAreEnumerated() |
||||||
|
{ |
||||||
|
CreateCmdlet(); |
||||||
|
EnableAllParameter(); |
||||||
|
|
||||||
|
fakeConsoleHost.AddFakeProject("A"); |
||||||
|
fakeConsoleHost.AddFakeProject("B"); |
||||||
|
|
||||||
|
RunCmdlet(); |
||||||
|
|
||||||
|
bool enumerated = fakeCommandRuntime.EnumerateCollectionPassedToWriteObject; |
||||||
|
|
||||||
|
Assert.IsTrue(enumerated); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ProcessRecord_TwoProjectsOpenAndNameParameterMatchesOneProject_OneProjectWrittenToPipeline() |
||||||
|
{ |
||||||
|
CreateCmdlet(); |
||||||
|
cmdlet.Name = new string[] { "B" }; |
||||||
|
|
||||||
|
fakeConsoleHost.AddFakeProject("A"); |
||||||
|
var projectB = fakeConsoleHost.AddFakeProject("B"); |
||||||
|
|
||||||
|
RunCmdlet(); |
||||||
|
|
||||||
|
var projects = fakeCommandRuntime.FirstObjectPassedToWriteObject as IEnumerable<Project>; |
||||||
|
var expectedProjects = new TestableProject[] { |
||||||
|
projectB |
||||||
|
}; |
||||||
|
|
||||||
|
ProjectCollectionAssertAreEqual(expectedProjects, projects); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ProcessRecord_TwoProjectsOpenAndNameParameterMatchesOneProjectButWithDifferentCase_OneProjectWrittenToPipeline() |
||||||
|
{ |
||||||
|
CreateCmdlet(); |
||||||
|
cmdlet.Name = new string[] { "b" }; |
||||||
|
|
||||||
|
fakeConsoleHost.AddFakeProject("A"); |
||||||
|
var projectB = fakeConsoleHost.AddFakeProject("B"); |
||||||
|
|
||||||
|
RunCmdlet(); |
||||||
|
|
||||||
|
var projects = fakeCommandRuntime.FirstObjectPassedToWriteObject as IEnumerable<Project>; |
||||||
|
var expectedProjects = new TestableProject[] { |
||||||
|
projectB |
||||||
|
}; |
||||||
|
|
||||||
|
ProjectCollectionAssertAreEqual(expectedProjects, projects); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ProcessRecord_ThreeProjectsOpenAndTwoNameParametersMatchesTwoProjects_TwoProjectsWrittenToPipeline() |
||||||
|
{ |
||||||
|
CreateCmdlet(); |
||||||
|
cmdlet.Name = new string[] { "B", "C" }; |
||||||
|
|
||||||
|
fakeConsoleHost.AddFakeProject("A"); |
||||||
|
var projectB = fakeConsoleHost.AddFakeProject("B"); |
||||||
|
var projectC = fakeConsoleHost.AddFakeProject("C"); |
||||||
|
|
||||||
|
RunCmdlet(); |
||||||
|
|
||||||
|
var projects = fakeCommandRuntime.FirstObjectPassedToWriteObject as IEnumerable<Project>; |
||||||
|
var expectedProjects = new TestableProject[] { |
||||||
|
projectB, |
||||||
|
projectC |
||||||
|
}; |
||||||
|
|
||||||
|
ProjectCollectionAssertAreEqual(expectedProjects, projects); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ProcessRecord_ThreeProjectsOpenAndTwoNameParametersMatchesTwoProjects_ProjectsWrittenToPipelineAreEnumerated() |
||||||
|
{ |
||||||
|
CreateCmdlet(); |
||||||
|
cmdlet.Name = new string[] { "B", "C" }; |
||||||
|
|
||||||
|
fakeConsoleHost.AddFakeProject("A"); |
||||||
|
var projectB = fakeConsoleHost.AddFakeProject("B"); |
||||||
|
var projectC = fakeConsoleHost.AddFakeProject("C"); |
||||||
|
|
||||||
|
RunCmdlet(); |
||||||
|
|
||||||
|
bool enumerated = fakeCommandRuntime.EnumerateCollectionPassedToWriteObject; |
||||||
|
|
||||||
|
Assert.IsTrue(enumerated); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ProcessRecord_ThreeProjectsAndTwoWildcardsUsedThatMatchTwoProjects_TwoProjectsWrittenToPipeline() |
||||||
|
{ |
||||||
|
CreateCmdlet(); |
||||||
|
cmdlet.Name = new string[] { "B*", "C*" }; |
||||||
|
|
||||||
|
fakeConsoleHost.AddFakeProject("A"); |
||||||
|
var projectB = fakeConsoleHost.AddFakeProject("B"); |
||||||
|
var projectC = fakeConsoleHost.AddFakeProject("C"); |
||||||
|
|
||||||
|
RunCmdlet(); |
||||||
|
|
||||||
|
var projects = fakeCommandRuntime.FirstObjectPassedToWriteObject as IEnumerable<Project>; |
||||||
|
var expectedProjects = new TestableProject[] { |
||||||
|
projectB, |
||||||
|
projectC |
||||||
|
}; |
||||||
|
|
||||||
|
ProjectCollectionAssertAreEqual(expectedProjects, projects); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue