#develop (short for SharpDevelop) is a free IDE for .NET programming languages.
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

// 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);
}
}
}