Browse Source

Handle error looking for init.ps1 in NuGet packages directory.

If there is an exception finding init.ps1 files when the solution is
opened then the unhandled exception dialog is shown. This can happen
if a NuGet package requires NuGet 3.0. This results in an
NuGetVersionNotSatisfiedException being thrown. Now when this happens
the error message is reported in the PowerShell console if it is open.
pull/729/merge
Matt Ward 10 years ago
parent
commit
336b10583e
  1. 11
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScriptsConsole.cs
  2. 6
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/RunPackageInitializationScriptsOnSolutionOpen.cs
  3. 5
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageInitializationScriptsInSolutionFactory.cs
  4. 29
      src/AddIns/Misc/PackageManagement/Test/Src/Scripting/RunPackageInitializationScriptsOnSolutionOpenTests.cs

11
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScriptsConsole.cs

@ -17,12 +17,13 @@
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
using System; using System;
using ICSharpCode.Scripting;
namespace ICSharpCode.PackageManagement.Scripting namespace ICSharpCode.PackageManagement.Scripting
{ {
public class PackageInitializationScriptsConsole public class PackageInitializationScriptsConsole
{ {
IPackageManagementConsoleHost consoleHost; readonly IPackageManagementConsoleHost consoleHost;
public PackageInitializationScriptsConsole( public PackageInitializationScriptsConsole(
IPackageManagementConsoleHost consoleHost) IPackageManagementConsoleHost consoleHost)
@ -36,5 +37,13 @@ namespace ICSharpCode.PackageManagement.Scripting
consoleHost.ExecuteCommand(command); consoleHost.ExecuteCommand(command);
} }
} }
public void WriteError(string message)
{
if (consoleHost.IsRunning) {
consoleHost.ScriptingConsole.WriteLine(message, ScriptingStyle.Error);
consoleHost.WritePrompt();
}
}
} }
} }

6
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/RunPackageInitializationScriptsOnSolutionOpen.cs

@ -47,7 +47,11 @@ namespace ICSharpCode.PackageManagement.Scripting
void SolutionOpened(object sender, SolutionEventArgs e) void SolutionOpened(object sender, SolutionEventArgs e)
{ {
RunPackageInitializationScripts(e.Solution); try {
RunPackageInitializationScripts(e.Solution);
} catch (Exception ex) {
scriptsConsole.WriteError(ex.Message);
}
} }
void RunPackageInitializationScripts(ISolution solution) void RunPackageInitializationScripts(ISolution solution)

5
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageInitializationScriptsInSolutionFactory.cs

@ -28,10 +28,15 @@ namespace PackageManagement.Tests.Helpers
new FakePackageInitializationScripts(); new FakePackageInitializationScripts();
public ISolution SolutionPassedToCreatePackageInitializationScripts; public ISolution SolutionPassedToCreatePackageInitializationScripts;
public Exception ExceptionToThrow;
public IPackageInitializationScripts CreatePackageInitializationScripts( public IPackageInitializationScripts CreatePackageInitializationScripts(
ISolution solution) ISolution solution)
{ {
if (ExceptionToThrow != null)
throw ExceptionToThrow;
SolutionPassedToCreatePackageInitializationScripts = solution; SolutionPassedToCreatePackageInitializationScripts = solution;
return FakePackageInitializationScripts; return FakePackageInitializationScripts;
} }

29
src/AddIns/Misc/PackageManagement/Test/Src/Scripting/RunPackageInitializationScriptsOnSolutionOpenTests.cs

@ -19,6 +19,7 @@
using System; using System;
using ICSharpCode.PackageManagement.Design; using ICSharpCode.PackageManagement.Design;
using ICSharpCode.PackageManagement.Scripting; using ICSharpCode.PackageManagement.Scripting;
using ICSharpCode.Scripting;
using ICSharpCode.Scripting.Tests.Utils; using ICSharpCode.Scripting.Tests.Utils;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework; using NUnit.Framework;
@ -102,5 +103,33 @@ namespace PackageManagement.Tests.Scripting
Assert.IsFalse(contains); Assert.IsFalse(contains);
} }
[Test]
public void Instance_ExceptionThrownByScriptsFactory_ErrorMessageLoggedToConsole()
{
CreateRunner();
SolutionHasPackageInitializationScripts();
fakeConsoleHost.IsRunning = true;
fakeScriptsFactory.ExceptionToThrow = new Exception("Error");
OpenSolution();
Assert.AreEqual("Error", fakeScriptingConsole.TextPassedToWriteLine);
Assert.AreEqual(ScriptingStyle.Error, fakeScriptingConsole.ScriptingStylePassedToWriteLine);
Assert.IsTrue(fakeConsoleHost.IsWritePromptCalled);
}
[Test]
public void Instance_ExceptionThrownByScriptsFactoryButConsoleIsNotRunning_NoErrorMessageLoggedToConsole()
{
CreateRunner();
SolutionHasPackageInitializationScripts();
fakeConsoleHost.IsRunning = false;
fakeScriptsFactory.ExceptionToThrow = new Exception("Error");
OpenSolution();
Assert.IsNull(fakeScriptingConsole.TextPassedToWriteLine);
}
} }
} }

Loading…
Cancel
Save