You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
398 lines
11 KiB
398 lines
11 KiB
// 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.Design; |
|
using ICSharpCode.PackageManagement.Scripting; |
|
using ICSharpCode.Scripting; |
|
using ICSharpCode.Scripting.Tests.Utils; |
|
using NuGet; |
|
using NUnit.Framework; |
|
using PackageManagement.Tests.Helpers; |
|
|
|
namespace PackageManagement.Tests.Scripting |
|
{ |
|
[TestFixture] |
|
public class PackageManagementConsoleHostTests |
|
{ |
|
TestablePackageManagementConsoleHost host; |
|
FakeScriptingConsoleWithLinesToRead scriptingConsole; |
|
FakePowerShellHost powerShellHost; |
|
FakePackageManagementSolution fakeSolution; |
|
FakeRegisteredPackageRepositories fakeRegisteredPackageRepositories; |
|
|
|
void CreateHost() |
|
{ |
|
host = new TestablePackageManagementConsoleHost(); |
|
fakeSolution = host.FakeSolution; |
|
scriptingConsole = host.FakeScriptingConsole; |
|
powerShellHost = host.FakePowerShellHostFactory.FakePowerShellHost; |
|
fakeRegisteredPackageRepositories = host.FakeRegisteredPackageRepositories; |
|
} |
|
|
|
void RunHost() |
|
{ |
|
host.Run(); |
|
host.ThreadStartPassedToCreateThread.Invoke(); |
|
} |
|
|
|
[Test] |
|
public void Dispose_ScriptingConsoleIsNotNull_ScriptingConsoleIsDisposed() |
|
{ |
|
CreateHost(); |
|
host.Dispose(); |
|
|
|
Assert.IsTrue(scriptingConsole.IsDisposeCalled); |
|
} |
|
|
|
[Test] |
|
public void Dispose_ScriptingConsoleIsNull_NullReferenceExceptionIsNotThrown() |
|
{ |
|
CreateHost(); |
|
host.ScriptingConsole = null; |
|
|
|
Assert.DoesNotThrow(() => host.Dispose()); |
|
} |
|
|
|
[Test] |
|
public void Run_ConsoleHostIsRun_StartsThreadToProcessCommandsEnteredIntoConsole() |
|
{ |
|
CreateHost(); |
|
host.Run(); |
|
|
|
Assert.IsTrue(host.FakeThread.IsStartCalled); |
|
} |
|
|
|
[Test] |
|
public void Dispose_ConsoleHostRunCalled_ThreadJoinIsCalled() |
|
{ |
|
CreateHost(); |
|
host.Run(); |
|
host.Dispose(); |
|
|
|
Assert.IsTrue(host.FakeThread.IsJoinCalled); |
|
} |
|
|
|
[Test] |
|
public void Dispose_DisposeCalledTwiceAfterConsoleHostIsRun_ThreadJoinIsCalledOnce() |
|
{ |
|
CreateHost(); |
|
host.Run(); |
|
host.Dispose(); |
|
host.FakeThread.IsJoinCalled = false; |
|
|
|
host.Dispose(); |
|
|
|
Assert.IsFalse(host.FakeThread.IsJoinCalled); |
|
} |
|
|
|
[Test] |
|
public void Run_ConsoleExitsOnFirstRead_PowerShellHostIsCreated() |
|
{ |
|
CreateHost(); |
|
RunHost(); |
|
|
|
var actualConsole = host.FakePowerShellHostFactory.ScriptingConsolePassedToCreatePowerShellHost; |
|
var expectedConsole = scriptingConsole; |
|
|
|
Assert.AreSame(expectedConsole, actualConsole); |
|
} |
|
|
|
[Test] |
|
public void Run_ConsoleExitsOnFirstRead_InitialPowerShellExecutionPolicySet() |
|
{ |
|
CreateHost(); |
|
RunHost(); |
|
|
|
Assert.IsTrue(powerShellHost.IsSetRemoteSignedExecutionPolicyCalled); |
|
} |
|
|
|
[Test] |
|
public void Run_ConsoleExitsOnFirstRead_PromptTextWrittenToConsole() |
|
{ |
|
CreateHost(); |
|
RunHost(); |
|
var expectedTextPassedToWrite = new String[] { "PM> "}; |
|
var actualTextPassedToWrite = scriptingConsole.AllTextPassedToWrite; |
|
|
|
CollectionAssert.AreEqual(expectedTextPassedToWrite, actualTextPassedToWrite); |
|
} |
|
|
|
[Test] |
|
public void Run_ConsoleExitsOnFirstRead_PromptTextWrittenWithPromptyStyleToConsole() |
|
{ |
|
CreateHost(); |
|
RunHost(); |
|
|
|
Assert.AreEqual(ScriptingStyle.Prompt, scriptingConsole.ScriptingStylePassedToWrite); |
|
} |
|
|
|
[Test] |
|
public void Run_OneCommandEntered_CommandExecutedByPowerShellHost() |
|
{ |
|
CreateHost(); |
|
scriptingConsole.AllTextToReturnFromReadLine.Add("RunThis"); |
|
RunHost(); |
|
|
|
Assert.AreEqual("RunThis", powerShellHost.CommandPassedToExecuteCommand); |
|
} |
|
|
|
[Test] |
|
public void Run_OneCommandEntered_CommandPromptDisplayedAgain() |
|
{ |
|
CreateHost(); |
|
scriptingConsole.AllTextToReturnFromReadLine.Add("RunThis"); |
|
RunHost(); |
|
|
|
var expectedTextPassedToWrite = new String[] { "PM> ", "PM> "}; |
|
var actualTextPassedToWrite = scriptingConsole.AllTextPassedToWrite; |
|
|
|
CollectionAssert.AreEqual(expectedTextPassedToWrite, actualTextPassedToWrite); |
|
} |
|
|
|
[Test] |
|
public void Run_ConsoleExitsOnFirstRead_NoCommandsPassedToPowerShellHost() |
|
{ |
|
CreateHost(); |
|
powerShellHost.CommandPassedToExecuteCommand = "test"; |
|
RunHost(); |
|
|
|
Assert.AreEqual("test", powerShellHost.CommandPassedToExecuteCommand); |
|
} |
|
|
|
[Test] |
|
public void Run_TwoCommandsEnteredByUser_BothCommandsExecuted() |
|
{ |
|
CreateHost(); |
|
var commands = new string[] { "one", "two" }; |
|
scriptingConsole.AllTextToReturnFromReadLine.AddRange(commands); |
|
|
|
host.ScriptingConsole = scriptingConsole; |
|
RunHost(); |
|
|
|
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); |
|
} |
|
|
|
[Test] |
|
public void Run_TextDisplayedBeforeFirstPromptDisplayed_NuGetVersionDisplayed() |
|
{ |
|
CreateHost(); |
|
powerShellHost.Version = new Version("1.2.0.4"); |
|
RunHost(); |
|
|
|
string expected = "NuGet 1.2.0.4"; |
|
|
|
bool contains = scriptingConsole.AllTextPassedToWriteLine.Contains(expected); |
|
|
|
Assert.IsTrue(contains); |
|
} |
|
|
|
[Test] |
|
public void Run_TextDisplayedBeforeFirstPromptDisplayed_HelpInfoDisplayed() |
|
{ |
|
CreateHost(); |
|
string expectedHelpMessage = "Type 'get-help NuGet' for more information."; |
|
host.TextToReturnFromGetHelpInfo = expectedHelpMessage; |
|
RunHost(); |
|
|
|
bool contains = scriptingConsole.AllTextPassedToWriteLine.Contains("Type 'get-help NuGet' for more information."); |
|
|
|
Assert.IsTrue(contains); |
|
} |
|
|
|
[Test] |
|
public void Run_TextDisplayedBeforeFirstPromptDisplayed_BlankLineBeforePrompt() |
|
{ |
|
CreateHost(); |
|
host.TextToReturnFromGetHelpInfo = "abc"; |
|
RunHost(); |
|
|
|
string actualLastLine = scriptingConsole.LastLinePassedToWriteLine; |
|
string expectedLastLine = String.Empty; |
|
|
|
Assert.AreEqual(expectedLastLine, actualLastLine); |
|
} |
|
|
|
[Test] |
|
public void GetProject_ProjectNameAndPackageSourcePassed_ProjectNameUsedToGetProject() |
|
{ |
|
CreateHost(); |
|
string source = "http://sharpdevelop.net"; |
|
string expectedProjectName = "Test"; |
|
|
|
host.GetProject(source, expectedProjectName); |
|
|
|
var actualProjectName = fakeSolution.ProjectNamePassedToGetProject; |
|
|
|
Assert.AreEqual(expectedProjectName, actualProjectName); |
|
} |
|
|
|
[Test] |
|
public void GetProject_ProjectNameAndPackageSourcePassed_PackageSourceUsedToGetProject() |
|
{ |
|
CreateHost(); |
|
string expectedSource = "http://sharpdevelop.net"; |
|
|
|
host.GetProject(expectedSource, "Test"); |
|
|
|
var actualSource = fakeSolution.PackageSourcePassedToGetProject.Source; |
|
|
|
Assert.AreEqual(expectedSource, actualSource); |
|
} |
|
|
|
[Test] |
|
public void GetProject_ProjectNameAndPackageSourcePassed_ReturnsProject() |
|
{ |
|
CreateHost(); |
|
string source = "http://sharpdevelop.net"; |
|
|
|
var project = host.GetProject(source, "Test"); |
|
|
|
var expectedProject = fakeSolution.FakeProject; |
|
|
|
Assert.AreEqual(expectedProject, project); |
|
} |
|
|
|
[Test] |
|
public void GetProject_NullPackageSourcePassed_UsesDefaultSourceToCreateProject() |
|
{ |
|
CreateHost(); |
|
var expectedSource = new PackageSource("http://sharpdevelop.net"); |
|
host.ActivePackageSource = expectedSource; |
|
string packageSource = null; |
|
|
|
host.GetProject(packageSource, "Test"); |
|
|
|
var actualSource = fakeSolution.PackageSourcePassedToGetProject; |
|
|
|
Assert.AreEqual(expectedSource, actualSource); |
|
} |
|
|
|
[Test] |
|
public void GetProject_NullProjectPassed_UsesDefaultProjectToCreateProject() |
|
{ |
|
CreateHost(); |
|
var source = "http://sharpdevelop.net"; |
|
var project = ProjectHelper.CreateTestProject("Test"); |
|
host.DefaultProject = project; |
|
|
|
host.GetProject(source, null); |
|
|
|
var projectName = fakeSolution.ProjectNamePassedToGetProject; |
|
|
|
Assert.AreEqual("Test", projectName); |
|
} |
|
|
|
[Test] |
|
public void GetProject_ProjectNameAndRepositoryPassed_ProjectNameUsedToGetProject() |
|
{ |
|
CreateHost(); |
|
var repository = new FakePackageRepository(); |
|
string expectedProjectName = "Test"; |
|
|
|
host.GetProject(repository, expectedProjectName); |
|
|
|
var actualProjectName = fakeSolution.ProjectNamePassedToGetProject; |
|
|
|
Assert.AreEqual(expectedProjectName, actualProjectName); |
|
} |
|
|
|
[Test] |
|
public void GetProject_ProjectNameAndRepositoryPassed_RepositoryUsedToGetProject() |
|
{ |
|
CreateHost(); |
|
var repository = new FakePackageRepository(); |
|
|
|
host.GetProject(repository, "Test"); |
|
|
|
var actualRepository = fakeSolution.RepositoryPassedToGetProject; |
|
|
|
Assert.AreEqual(repository, actualRepository); |
|
} |
|
|
|
[Test] |
|
public void GetProject_ProjectNameAndRepositoryPassed_ReturnsProject() |
|
{ |
|
CreateHost(); |
|
var repository = new FakePackageRepository(); |
|
|
|
var project = host.GetProject(repository, "Test"); |
|
|
|
var expectedProject = fakeSolution.FakeProject; |
|
|
|
Assert.AreEqual(expectedProject, project); |
|
} |
|
|
|
[Test] |
|
public void GetProject_NullProjectNameAndNonNullRepositoryPassed_UsesDefaultProjectNameToCreateProject() |
|
{ |
|
CreateHost(); |
|
host.DefaultProject = ProjectHelper.CreateTestProject("MyProject"); |
|
var repository = new FakePackageRepository(); |
|
|
|
var project = host.GetProject(repository, null); |
|
|
|
var projectName = fakeSolution.ProjectNamePassedToGetProject; |
|
|
|
Assert.AreEqual("MyProject", projectName); |
|
} |
|
|
|
[Test] |
|
public void ActivePackageSource_ConsoleHostCreated_ReturnsRegisteredPackageSourcesActivePackageSource() |
|
{ |
|
CreateHost(); |
|
var expectedPackageSource = new PackageSource("Test"); |
|
fakeRegisteredPackageRepositories.ActivePackageSource = expectedPackageSource; |
|
|
|
var actualPackageSource = host.ActivePackageSource; |
|
|
|
Assert.AreEqual(expectedPackageSource, actualPackageSource); |
|
} |
|
|
|
[Test] |
|
public void ActivePackageSource_ActivePackageSourcechanged_RegisteredPackageSourcesActivePackageSourceIsUpdated() |
|
{ |
|
CreateHost(); |
|
var expectedPackageSource = new PackageSource("Test"); |
|
host.ActivePackageSource = expectedPackageSource; |
|
|
|
var actualPackageSource = fakeRegisteredPackageRepositories.ActivePackageSource; |
|
|
|
Assert.AreEqual(expectedPackageSource, actualPackageSource); |
|
} |
|
} |
|
}
|
|
|