12 changed files with 402 additions and 1 deletions
@ -0,0 +1,51 @@ |
|||||||
|
// 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 ICSharpCode.PackageManagement.Cmdlets |
||||||
|
{ |
||||||
|
[Cmdlet(VerbsLifecycle.Invoke, "RunPackageScripts", DefaultParameterSetName = ParameterAttribute.AllParameterSets)] |
||||||
|
public class InvokeRunPackageScriptsCmdlet : PackageManagementCmdlet |
||||||
|
{ |
||||||
|
PackageScriptsToRun scriptsToBeRun; |
||||||
|
|
||||||
|
public InvokeRunPackageScriptsCmdlet() |
||||||
|
: this( |
||||||
|
PackageManagementServices.PackageScriptsToRun, |
||||||
|
PackageManagementServices.ConsoleHost, |
||||||
|
null) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
public InvokeRunPackageScriptsCmdlet( |
||||||
|
PackageScriptsToRun scriptsToBeRun, |
||||||
|
IPackageManagementConsoleHost consoleHost, |
||||||
|
ICmdletTerminatingError terminatingError) |
||||||
|
: base(consoleHost, terminatingError) |
||||||
|
{ |
||||||
|
this.scriptsToBeRun = scriptsToBeRun; |
||||||
|
} |
||||||
|
|
||||||
|
protected override void ProcessRecord() |
||||||
|
{ |
||||||
|
RunPackageScripts(); |
||||||
|
} |
||||||
|
|
||||||
|
void RunPackageScripts() |
||||||
|
{ |
||||||
|
IPackageScript script = null; |
||||||
|
while (GetNextScript(out script)) { |
||||||
|
Run(script); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
bool GetNextScript(out IPackageScript script) |
||||||
|
{ |
||||||
|
script = scriptsToBeRun.GetNextScript(); |
||||||
|
return script != null; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,41 @@ |
|||||||
|
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||||
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||||
|
|
||||||
|
using System; |
||||||
|
using ICSharpCode.PackageManagement.Cmdlets; |
||||||
|
using ICSharpCode.PackageManagement.Scripting; |
||||||
|
using PackageManagement.Tests.Helpers; |
||||||
|
|
||||||
|
namespace PackageManagement.Cmdlets.Tests.Helpers |
||||||
|
{ |
||||||
|
public class TestableInvokeRunPackageScriptsCmdlet : InvokeRunPackageScriptsCmdlet |
||||||
|
{ |
||||||
|
public FakeCmdletTerminatingError FakeCmdletTerminatingError; |
||||||
|
public FakePackageManagementConsoleHost FakePackageManagementConsoleHost; |
||||||
|
public PackageScriptsToRun ScriptsToBeRun; |
||||||
|
|
||||||
|
public TestableInvokeRunPackageScriptsCmdlet() |
||||||
|
: this( |
||||||
|
new PackageScriptsToRun(), |
||||||
|
new FakePackageManagementConsoleHost(), |
||||||
|
new FakeCmdletTerminatingError()) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
public TestableInvokeRunPackageScriptsCmdlet( |
||||||
|
PackageScriptsToRun scriptsToBeRun, |
||||||
|
FakePackageManagementConsoleHost consoleHost, |
||||||
|
FakeCmdletTerminatingError cmdletTerminatingError) |
||||||
|
: base(scriptsToBeRun, consoleHost, cmdletTerminatingError) |
||||||
|
{ |
||||||
|
this.ScriptsToBeRun = scriptsToBeRun; |
||||||
|
this.FakePackageManagementConsoleHost = consoleHost; |
||||||
|
this.FakeCmdletTerminatingError = cmdletTerminatingError; |
||||||
|
} |
||||||
|
|
||||||
|
public void CallProcessRecord() |
||||||
|
{ |
||||||
|
base.ProcessRecord(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,95 @@ |
|||||||
|
// 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.Scripting; |
||||||
|
using NUnit.Framework; |
||||||
|
using PackageManagement.Cmdlets.Tests.Helpers; |
||||||
|
using PackageManagement.Tests.Helpers; |
||||||
|
|
||||||
|
namespace PackageManagement.Cmdlets.Tests |
||||||
|
{ |
||||||
|
[TestFixture] |
||||||
|
public class InvokeRunPackageScriptsCmdletTests |
||||||
|
{ |
||||||
|
TestableInvokeRunPackageScriptsCmdlet cmdlet; |
||||||
|
FakeCmdletTerminatingError fakeTerminatingError; |
||||||
|
PackageScriptsToRun scriptsToRun; |
||||||
|
|
||||||
|
void CreateCmdlet() |
||||||
|
{ |
||||||
|
cmdlet = new TestableInvokeRunPackageScriptsCmdlet(); |
||||||
|
fakeTerminatingError = cmdlet.FakeCmdletTerminatingError; |
||||||
|
scriptsToRun = cmdlet.ScriptsToBeRun; |
||||||
|
} |
||||||
|
|
||||||
|
void RunCmdlet() |
||||||
|
{ |
||||||
|
cmdlet.CallProcessRecord(); |
||||||
|
} |
||||||
|
|
||||||
|
FakePackageScript AddScript() |
||||||
|
{ |
||||||
|
var script = new FakePackageScript(); |
||||||
|
scriptsToRun.AddScript(script); |
||||||
|
return script; |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ProcessRecord_OnePackageScriptToRun_PackageScriptIsRun() |
||||||
|
{ |
||||||
|
CreateCmdlet(); |
||||||
|
FakePackageScript script = AddScript(); |
||||||
|
RunCmdlet(); |
||||||
|
|
||||||
|
bool executed = script.IsExecuted; |
||||||
|
|
||||||
|
Assert.IsTrue(executed); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ProcessRecord_TwoPackageScriptsToRun_SecondPackageScriptIsRun() |
||||||
|
{ |
||||||
|
CreateCmdlet(); |
||||||
|
AddScript(); |
||||||
|
FakePackageScript script = AddScript(); |
||||||
|
RunCmdlet(); |
||||||
|
|
||||||
|
bool executed = script.IsExecuted; |
||||||
|
|
||||||
|
Assert.IsTrue(executed); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ProcessRecord_OnePackageScriptToRun_PackageScriptSessionIsCmdlet() |
||||||
|
{ |
||||||
|
CreateCmdlet(); |
||||||
|
FakePackageScript script = AddScript(); |
||||||
|
RunCmdlet(); |
||||||
|
|
||||||
|
IPackageScriptSession session = script.SessionPassedToExecute; |
||||||
|
|
||||||
|
Assert.AreEqual(cmdlet, session); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ProcessRecord_TwoPackageScriptsToRun_TwoPackageScriptSessionIsCmdlet() |
||||||
|
{ |
||||||
|
CreateCmdlet(); |
||||||
|
AddScript(); |
||||||
|
FakePackageScript script = AddScript(); |
||||||
|
RunCmdlet(); |
||||||
|
|
||||||
|
IPackageScriptSession session = script.SessionPassedToExecute; |
||||||
|
|
||||||
|
Assert.AreEqual(cmdlet, session); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ProcessRecord_NoPackageScriptsToRun_NullReferenceExceptionIsNotThrown() |
||||||
|
{ |
||||||
|
CreateCmdlet(); |
||||||
|
Assert.DoesNotThrow(() => RunCmdlet()); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,32 @@ |
|||||||
|
// 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.Concurrent; |
||||||
|
|
||||||
|
namespace ICSharpCode.PackageManagement.Scripting |
||||||
|
{ |
||||||
|
public class PackageScriptsToRun |
||||||
|
{ |
||||||
|
ConcurrentQueue<IPackageScript> scripts = new ConcurrentQueue<IPackageScript>(); |
||||||
|
|
||||||
|
public IPackageScript GetNextScript() |
||||||
|
{ |
||||||
|
IPackageScript script = null; |
||||||
|
if (GetNextScript(out script)) { |
||||||
|
return script; |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public bool GetNextScript(out IPackageScript script) |
||||||
|
{ |
||||||
|
return scripts.TryDequeue(out script); |
||||||
|
} |
||||||
|
|
||||||
|
public void AddScript(IPackageScript script) |
||||||
|
{ |
||||||
|
scripts.Enqueue(script); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,156 @@ |
|||||||
|
// 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.Scripting; |
||||||
|
using NUnit.Framework; |
||||||
|
using PackageManagement.Tests.Helpers; |
||||||
|
|
||||||
|
namespace PackageManagement.Tests.Scripting |
||||||
|
{ |
||||||
|
[TestFixture] |
||||||
|
public class PackageScriptsToRunTests |
||||||
|
{ |
||||||
|
PackageScriptsToRun scriptsToRun; |
||||||
|
|
||||||
|
void CreateScriptsToBeRun() |
||||||
|
{ |
||||||
|
scriptsToRun = new PackageScriptsToRun(); |
||||||
|
} |
||||||
|
|
||||||
|
FakePackageScript AddScript() |
||||||
|
{ |
||||||
|
var script = new FakePackageScript(); |
||||||
|
scriptsToRun.AddScript(script); |
||||||
|
return script; |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetNextScript_NewInstance_ReturnsNull() |
||||||
|
{ |
||||||
|
CreateScriptsToBeRun(); |
||||||
|
IPackageScript script = scriptsToRun.GetNextScript(); |
||||||
|
|
||||||
|
Assert.IsNull(script); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetNextScript_NewInstance_ReturnsFalse() |
||||||
|
{ |
||||||
|
CreateScriptsToBeRun(); |
||||||
|
IPackageScript script = null; |
||||||
|
bool result = scriptsToRun.GetNextScript(out script); |
||||||
|
|
||||||
|
Assert.IsFalse(result); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetNextScript_OneScriptAdded_ReturnsScript() |
||||||
|
{ |
||||||
|
CreateScriptsToBeRun(); |
||||||
|
FakePackageScript expectedScript = AddScript(); |
||||||
|
|
||||||
|
IPackageScript script = scriptsToRun.GetNextScript(); |
||||||
|
|
||||||
|
Assert.AreEqual(expectedScript, script); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetNextScript_OneScriptAdded_ReturnsScriptInOutParameter() |
||||||
|
{ |
||||||
|
CreateScriptsToBeRun(); |
||||||
|
FakePackageScript expectedScript = AddScript(); |
||||||
|
|
||||||
|
IPackageScript script = null; |
||||||
|
scriptsToRun.GetNextScript(out script); |
||||||
|
|
||||||
|
Assert.AreEqual(expectedScript, script); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetNextScript_OneScriptAdded_ReturnsTrue() |
||||||
|
{ |
||||||
|
CreateScriptsToBeRun(); |
||||||
|
FakePackageScript expectedScript = AddScript(); |
||||||
|
|
||||||
|
IPackageScript script = null; |
||||||
|
bool result = scriptsToRun.GetNextScript(out script); |
||||||
|
|
||||||
|
Assert.IsTrue(result); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetNextScript_CalledTwiceWithOneScriptAdded_ReturnsNullOnSecondCall() |
||||||
|
{ |
||||||
|
CreateScriptsToBeRun(); |
||||||
|
FakePackageScript expectedScript = AddScript(); |
||||||
|
scriptsToRun.GetNextScript(); |
||||||
|
IPackageScript script = scriptsToRun.GetNextScript(); |
||||||
|
|
||||||
|
Assert.IsNull(script); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetNextScript_CalledTwiceWithOneScriptAdded_ReturnsNullScriptInOutParameterOnSecondCall() |
||||||
|
{ |
||||||
|
CreateScriptsToBeRun(); |
||||||
|
FakePackageScript expectedScript = AddScript(); |
||||||
|
scriptsToRun.GetNextScript(); |
||||||
|
IPackageScript script = null; |
||||||
|
scriptsToRun.GetNextScript(out script); |
||||||
|
|
||||||
|
Assert.IsNull(script); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetNextScript_CalledTwiceWithOneScriptAdded_ReturnsFalseOnSecondCall() |
||||||
|
{ |
||||||
|
CreateScriptsToBeRun(); |
||||||
|
FakePackageScript expectedScript = AddScript(); |
||||||
|
scriptsToRun.GetNextScript(); |
||||||
|
|
||||||
|
IPackageScript script = null; |
||||||
|
bool result = scriptsToRun.GetNextScript(out script); |
||||||
|
|
||||||
|
Assert.IsFalse(result); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetNextScript_CalledTwiceWithTwoScriptsAdded_ReturnsSecondScriptAdded() |
||||||
|
{ |
||||||
|
CreateScriptsToBeRun(); |
||||||
|
AddScript(); |
||||||
|
FakePackageScript expectedScript = AddScript(); |
||||||
|
scriptsToRun.GetNextScript(); |
||||||
|
IPackageScript script = scriptsToRun.GetNextScript(); |
||||||
|
|
||||||
|
Assert.AreEqual(expectedScript, script); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetNextScript_CalledTwiceWithTwoScriptsAdded_ReturnsSecondScriptAddedInOutParameter() |
||||||
|
{ |
||||||
|
CreateScriptsToBeRun(); |
||||||
|
AddScript(); |
||||||
|
FakePackageScript expectedScript = AddScript(); |
||||||
|
scriptsToRun.GetNextScript(); |
||||||
|
IPackageScript script = null; |
||||||
|
scriptsToRun.GetNextScript(out script); |
||||||
|
|
||||||
|
Assert.AreEqual(expectedScript, script); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetNextScript_CalledTwiceWithTwoScriptsAdded_ReturnsTrueOnSecondCall() |
||||||
|
{ |
||||||
|
CreateScriptsToBeRun(); |
||||||
|
AddScript(); |
||||||
|
FakePackageScript expectedScript = AddScript(); |
||||||
|
scriptsToRun.GetNextScript(); |
||||||
|
IPackageScript script = null; |
||||||
|
bool result = scriptsToRun.GetNextScript(out script); |
||||||
|
|
||||||
|
Assert.IsTrue(result); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue