15 changed files with 451 additions and 7 deletions
@ -0,0 +1,92 @@
@@ -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 @@
@@ -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 @@
@@ -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 @@
@@ -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