Browse Source

Moved ProcessRunner and associated classes out of the NAnt and Code Coverage addin and into ICSharpCode.SharpDevelop (Base).

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1092 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Matt Ward 20 years ago
parent
commit
44ad25ab69
  1. 6
      src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.csproj
  2. 1
      src/AddIns/Misc/CodeCoverage/Project/Src/NCoverRunner.cs
  3. 98
      src/AddIns/Misc/CodeCoverage/Project/Src/OutputReader.cs
  4. 266
      src/AddIns/Misc/CodeCoverage/Project/Src/ProcessRunner.cs
  5. 23
      src/AddIns/Misc/CodeCoverage/Project/Src/ProcessRunnerException.cs
  6. 1
      src/AddIns/Misc/CodeCoverage/Project/Src/RunTestWithCodeCoverageCommand.cs
  7. 4
      src/AddIns/Misc/NAntAddIn/Project/NAntAddIn.csproj
  8. 1
      src/AddIns/Misc/NAntAddIn/Project/Src/Commands/AbstractRunNAntCommand.cs
  9. 32
      src/AddIns/Misc/NAntAddIn/Project/Src/LineReceivedEventArgs.cs
  10. 1
      src/AddIns/Misc/NAntAddIn/Project/Src/NAntRunner.cs
  11. 33
      src/AddIns/Misc/NAntAddIn/Test/Config.cs
  12. 15
      src/AddIns/Misc/NAntAddIn/Test/NAntAddIn.Tests.csproj
  13. 9
      src/AddIns/Misc/NAntAddIn/Test/NAntAddIn.Tests.dll.config
  14. 5
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  15. 2
      src/Main/Base/Project/Src/Util/LineReceivedEventArgs.cs
  16. 3
      src/Main/Base/Project/Src/Util/OutputReader.cs
  17. 2
      src/Main/Base/Project/Src/Util/ProcessRunner.cs
  18. 2
      src/Main/Base/Project/Src/Util/ProcessRunnerException.cs
  19. 12
      src/Main/Base/Test/CancelLongRunningAppTestFixture.cs
  20. 0
      src/Main/Base/Test/ConsoleApp/AssemblyInfo.cs
  21. 0
      src/Main/Base/Test/ConsoleApp/ConsoleApp.cs
  22. 0
      src/Main/Base/Test/ConsoleApp/ConsoleApp.csproj
  23. 0
      src/Main/Base/Test/ConsoleApp/ConsoleApp.sln
  24. BIN
      src/Main/Base/Test/ConsoleApp/bin/ConsoleApp.exe
  25. 19
      src/Main/Base/Test/ConsoleAppTestFixtureBase.cs
  26. 10
      src/Main/Base/Test/ExitCodeTestFixture.cs
  27. 12
      src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj
  28. 10
      src/Main/Base/Test/LineReceivedFromProcessTestFixture.cs
  29. 4
      src/Main/Base/Test/NoSuchExecutableTestFixture.cs
  30. 10
      src/Main/Base/Test/ProcessExitedTestFixture.cs
  31. 4
      src/Main/Base/Test/ProcessRunnerNotStartedTestFixture.cs
  32. 26
      src/Main/Base/Test/StandardOutputFromProcessTestFixture.cs
  33. 14
      src/SharpDevelop.Tests.sln

6
src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.csproj

@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
<AssemblyName>CodeCoverage</AssemblyName>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{08CE9972-283B-44F4-82FA-966F7DFA6B7A}</ProjectGuid>
<ProjectGuid>{08ce9972-283b-44f4-82fa-966f7dfa6b7a}</ProjectGuid>
<AllowUnsafeBlocks>False</AllowUnsafeBlocks>
<NoStdLib>False</NoStdLib>
<RegisterForComInterop>False</RegisterForComInterop>
@ -60,13 +60,9 @@ @@ -60,13 +60,9 @@
<EmbeddedResource Include="Resources\CodeCoverageOptionsPanel.xfrm" />
<Compile Include="Src\CodeCoverageDisplayItem.cs" />
<Compile Include="Src\ColorPickerComboBox.cs" />
<Compile Include="Src\OutputReader.cs" />
<Compile Include="Src\ProcessRunner.cs" />
<Compile Include="Src\ProcessRunnerException.cs" />
<Compile Include="Src\NCoverRunner.cs" />
<Compile Include="Src\NCoverRunnerSingleton.cs" />
<Compile Include="Src\NCoverExitEventArgs.cs" />
<Compile Include="Src\LineReceivedEventArgs.cs" />
<Compile Include="Src\CodeCoverageException.cs" />
<Compile Include="Src\CodeCoverageProjectOptionsPanel.cs" />
<EmbeddedResource Include="Resources\CodeCoverageProjectOptionsPanel.xfrm" />

1
src/AddIns/Misc/CodeCoverage/Project/Src/NCoverRunner.cs

@ -5,6 +5,7 @@ @@ -5,6 +5,7 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop.Util;
using System;
using System.Diagnostics;
using System.Text;

98
src/AddIns/Misc/CodeCoverage/Project/Src/OutputReader.cs

@ -1,98 +0,0 @@ @@ -1,98 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Threading;
namespace ICSharpCode.CodeCoverage
{
/// <summary>
/// A threaded <see cref="Process.StandardOutput"/> or
/// <see cref="Process.StandardError"/> reader.
/// </summary>
public class OutputReader
{
StreamReader reader;
string output = String.Empty;
Thread thread;
public event LineReceivedEventHandler LineReceived;
public OutputReader(StreamReader reader)
{
this.reader = reader;
}
/// <summary>
/// Starts reading the output stream.
/// </summary>
public void Start()
{
thread = new Thread(new ThreadStart(ReadOutput));
thread.Start();
}
/// <summary>
/// Gets the text output read from the reader.
/// </summary>
public string Output {
get {
return output;
}
}
/// <summary>
/// Waits for the reader to finish.
/// </summary>
public void WaitForFinish()
{
if (thread != null) {
thread.Join();
}
}
/// <summary>
/// Raises the <see cref="LineReceived"/> event.
/// </summary>
/// <param name="line"></param>
protected void OnLineReceived(string line)
{
if (LineReceived != null) {
LineReceived(this, new LineReceivedEventArgs(line));
}
}
/// <summary>
/// Reads the output stream on a different thread.
/// </summary>
void ReadOutput()
{
//output = reader.ReadToEnd();
output = String.Empty;
StringBuilder outputBuilder = new StringBuilder();
bool endOfStream = false;
while(!endOfStream)
{
string line = reader.ReadLine();
if (line != null) {
outputBuilder.Append(line);
outputBuilder.Append(Environment.NewLine);
OnLineReceived(line);
} else {
endOfStream = true;
}
}
output = outputBuilder.ToString();
}
}
}

266
src/AddIns/Misc/CodeCoverage/Project/Src/ProcessRunner.cs

@ -1,266 +0,0 @@ @@ -1,266 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.Core;
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace ICSharpCode.CodeCoverage
{
/// <summary>
/// Runs a process that sends output to standard output and to
/// standard error.
/// </summary>
public class ProcessRunner : IDisposable
{
Process process;
string standardOutput = String.Empty;
string workingDirectory = String.Empty;
OutputReader standardOutputReader;
OutputReader standardErrorReader;
/// <summary>
/// Triggered when the process has exited.
/// </summary>
public event EventHandler ProcessExited;
/// <summary>
/// Triggered when a line of text is read from the standard output.
/// </summary>
public event LineReceivedEventHandler OutputLineReceived;
/// <summary>
/// Triggered when a line of text is read from the standard error.
/// </summary>
public event LineReceivedEventHandler ErrorLineReceived;
/// <summary>
/// Creates a new instance of the <see cref="ProcessRunner"/>.
/// </summary>
public ProcessRunner()
{
}
/// <summary>
/// Gets or sets the process's working directory.
/// </summary>
public string WorkingDirectory {
get {
return workingDirectory;
}
set {
workingDirectory = value;
}
}
/// <summary>
/// Gets the standard output returned from the process.
/// </summary>
public string StandardOutput {
get {
string output = String.Empty;
if (standardOutputReader != null) {
output = standardOutputReader.Output;
}
return output;
}
}
/// <summary>
/// Gets the standard error output returned from the process.
/// </summary>
public string StandardError {
get {
string output = String.Empty;
if (standardErrorReader != null) {
output = standardErrorReader.Output;
}
return output;
}
}
/// <summary>
/// Releases resources held by the <see cref="ProcessRunner"/>
/// </summary>
public void Dispose()
{
}
/// <summary>
/// Gets the process exit code.
/// </summary>
public int ExitCode {
get {
int exitCode = 0;
if (process != null) {
exitCode = process.ExitCode;
}
return exitCode;
}
}
/// <summary>
/// Waits for the process to exit.
/// </summary>
public void WaitForExit()
{
WaitForExit(Int32.MaxValue);
}
/// <summary>
/// Waits for the process to exit.
/// </summary>
/// <param name="timeout">A timeout in milliseconds.</param>
/// <returns><see langword="true"/> if the associated process has
/// exited; otherwise, <see langword="false"/></returns>
public bool WaitForExit(int timeout)
{
if (process == null) {
throw new ProcessRunnerException(StringParser.Parse("${res:ICSharpCode.NAntAddIn.ProcessRunner.NoProcessRunningErrorText}"));
}
bool exited = process.WaitForExit(timeout);
if (exited) {
standardOutputReader.WaitForFinish();
standardErrorReader.WaitForFinish();
}
return exited;
}
public bool IsRunning {
get {
bool isRunning = false;
if (process != null) {
isRunning = !process.HasExited;
}
return isRunning;
}
}
/// <summary>
/// Starts the process.
/// </summary>
/// <param name="command">The process filename.</param>
/// <param name="arguments">The command line arguments to
/// pass to the command.</param>
public void Start(string command, string arguments)
{
process = new Process();
process.StartInfo.CreateNoWindow = true;
process.StartInfo.FileName = command;
process.StartInfo.WorkingDirectory = workingDirectory;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.Arguments = arguments;
if (ProcessExited != null) {
process.EnableRaisingEvents = true;
process.Exited += new EventHandler(OnProcessExited);
}
process.Start();
standardOutputReader = new OutputReader(process.StandardOutput);
if (OutputLineReceived != null) {
standardOutputReader.LineReceived += new LineReceivedEventHandler(OnOutputLineReceived);
}
standardOutputReader.Start();
standardErrorReader = new OutputReader(process.StandardError);
if (ErrorLineReceived != null) {
standardErrorReader.LineReceived += new LineReceivedEventHandler(OnErrorLineReceived);
}
standardErrorReader.Start();
}
/// <summary>
/// Starts the process.
/// </summary>
/// <param name="command">The process filename.</param>
public void Start(string command)
{
Start(command, String.Empty);
}
/// <summary>
/// Kills the running process.
/// </summary>
public void Kill()
{
if (process != null) {
if (!process.HasExited) {
process.Kill();
process.Close();
process.Dispose();
process = null;
standardOutputReader.WaitForFinish();
standardErrorReader.WaitForFinish();
} else {
process = null;
}
}
// Control-C does not seem to work.
//GenerateConsoleCtrlEvent((int)ConsoleEvent.ControlC, 0);
}
/// <summary>
/// Raises the <see cref="ProcessExited"/> event.
/// </summary>
protected void OnProcessExited(object sender, EventArgs e)
{
if (ProcessExited != null) {
standardOutputReader.WaitForFinish();
standardErrorReader.WaitForFinish();
ProcessExited(this, e);
}
}
/// <summary>
/// Raises the <see cref="OutputLineReceived"/> event.
/// </summary>
/// <param name="sender">The event source.</param>
/// <param name="e">The line received event arguments.</param>
protected void OnOutputLineReceived(object sender, LineReceivedEventArgs e)
{
if (OutputLineReceived != null) {
OutputLineReceived(this, e);
}
}
/// <summary>
/// Raises the <see cref="ErrorLineReceived"/> event.
/// </summary>
/// <param name="sender">The event source.</param>
/// <param name="e">The line received event arguments.</param>
protected void OnErrorLineReceived(object sender, LineReceivedEventArgs e)
{
if (ErrorLineReceived != null) {
ErrorLineReceived(this, e);
}
}
enum ConsoleEvent
{
ControlC = 0,
ControlBreak = 1
};
[DllImport("kernel32.dll", SetLastError=true)]
static extern int GenerateConsoleCtrlEvent(int dwCtrlEvent, int dwProcessGroupId);
}
}

23
src/AddIns/Misc/CodeCoverage/Project/Src/ProcessRunnerException.cs

@ -1,23 +0,0 @@ @@ -1,23 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using System;
namespace ICSharpCode.CodeCoverage
{
/// <summary>
/// An exception thrown by a <see cref="ProcessRunner"/>
/// instance.
/// </summary>
public class ProcessRunnerException : ApplicationException
{
public ProcessRunnerException(string message)
: base(message)
{
}
}
}

1
src/AddIns/Misc/CodeCoverage/Project/Src/RunTestWithCodeCoverageCommand.cs

@ -9,6 +9,7 @@ using ICSharpCode.Core; @@ -9,6 +9,7 @@ using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Util;
using ICSharpCode.UnitTesting;
using System;
using System.IO;

4
src/AddIns/Misc/NAntAddIn/Project/NAntAddIn.csproj

@ -48,9 +48,6 @@ @@ -48,9 +48,6 @@
<Compile Include="Src\NAntRunner.cs" />
<Compile Include="Src\NAntExitEventArgs.cs" />
<Compile Include="Src\Commands\RunNAntCleanTargetCommand.cs" />
<Compile Include="Src\OutputReader.cs" />
<Compile Include="Src\ProcessRunner.cs" />
<Compile Include="Src\ProcessRunnerException.cs" />
<Compile Include="Src\Gui\NAntPadContent.cs" />
<Compile Include="Src\Gui\NAntPadTreeViewImageList.cs" />
<Compile Include="Src\Gui\NAntBuildFileTreeNode.cs" />
@ -66,7 +63,6 @@ @@ -66,7 +63,6 @@
<Compile Include="Src\Gui\NAntBuildFileErrorTreeNode.cs" />
<Compile Include="Src\Commands\GoToErrorCommand.cs" />
<Compile Include="Src\Commands\AbstractRunNAntCommand.cs" />
<Compile Include="Src\LineReceivedEventArgs.cs" />
<Compile Include="Src\NAntOutputParser.cs" />
<Compile Include="Src\TaskCollection.cs" />
<Compile Include="Src\NAntRunnerSingleton.cs" />

1
src/AddIns/Misc/NAntAddIn/Project/Src/Commands/AbstractRunNAntCommand.cs

@ -11,6 +11,7 @@ using ICSharpCode.NAntAddIn.Gui; @@ -11,6 +11,7 @@ using ICSharpCode.NAntAddIn.Gui;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Util;
using System;
using System.IO;
using System.Windows.Forms;

32
src/AddIns/Misc/NAntAddIn/Project/Src/LineReceivedEventArgs.cs

@ -1,32 +0,0 @@ @@ -1,32 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using System;
namespace ICSharpCode.NAntAddIn
{
public delegate void LineReceivedEventHandler(object sender, LineReceivedEventArgs e);
/// <summary>
/// The arguments for the <see cref="LineReceivedEventHandler"/> event.
/// </summary>
public class LineReceivedEventArgs : EventArgs
{
string line = String.Empty;
public LineReceivedEventArgs(string line)
{
this.line = line;
}
public string Line {
get {
return line;
}
}
}
}

1
src/AddIns/Misc/NAntAddIn/Project/Src/NAntRunner.cs

@ -5,6 +5,7 @@ @@ -5,6 +5,7 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop.Util;
using System;
using System.Diagnostics;
using System.Text;

33
src/AddIns/Misc/NAntAddIn/Test/Config.cs

@ -1,33 +0,0 @@ @@ -1,33 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using System;
using System.IO;
using System.Configuration;
namespace ICSharpCode.NAntAddIn.Tests
{
/// <summary>
/// Description of Config.
/// </summary>
public class Config
{
private Config()
{
}
/// <summary>
/// Gets the console app exe we are going to use to test the
/// ProcessRunner.
/// </summary>
public static string ConsoleAppFilename {
get {
return typeof(ICSharpCode.NAntAddIn.Tests.ConsoleApp.ConsoleApp).Assembly.Location;
}
}
}
}

15
src/AddIns/Misc/NAntAddIn/Test/NAntAddIn.Tests.csproj

@ -38,10 +38,6 @@ @@ -38,10 +38,6 @@
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Configuration" />
<Reference Include="ConsoleApp">
<HintPath>..\ConsoleApp\bin\ConsoleApp.exe</HintPath>
<SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="nunit.framework">
<HintPath>..\..\..\..\Tools\NUnit\nunit.framework.dll</HintPath>
<SpecificVersion>False</SpecificVersion>
@ -49,13 +45,6 @@ @@ -49,13 +45,6 @@
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs" />
<Compile Include="StandardOutputFromProcessTestFixture.cs" />
<Compile Include="CancelLongRunningAppTestFixture.cs" />
<Compile Include="Config.cs" />
<Compile Include="ExitCodeTestFixture.cs" />
<Compile Include="NoSuchExecutableTestFixture.cs" />
<Compile Include="ProcessExitedTestFixture.cs" />
<Compile Include="ProcessRunnerNotStartedTestFixture.cs" />
<Compile Include="ReadNAntBuildFileTestFixture.cs" />
<Compile Include="InvalidNAntBuildFileTestFixture.cs" />
<Compile Include="InvalidXmlNAntOutputTestFixture.cs" />
@ -64,12 +53,8 @@ @@ -64,12 +53,8 @@
<Compile Include="NAntErrorAndWarningOutputTestFixture.cs" />
<Compile Include="VBErrorNAntOutputTestFixture.cs" />
<Compile Include="FatalErrorNAntOutputTestFixture.cs" />
<Compile Include="LineReceivedFromProcessTestFixture.cs" />
<Compile Include="ReadOnlyPropertyNAntOutputTestFixture.cs" />
<Compile Include="NonFatalErrorNAntOutputTestFixture.cs" />
<None Include="NAntAddIn.Tests.dll.config">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj">

9
src/AddIns/Misc/NAntAddIn/Test/NAntAddIn.Tests.dll.config

@ -1,9 +0,0 @@ @@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<!--
<add key="consoleApp" value="C:\Projects\dotnet\Corsavy\SharpDevelop\src\AddIns\Misc\NAntAddIn\ConsoleApp\bin\ConsoleApp.exe" />
-->
</appSettings>
</configuration>

5
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -748,6 +748,10 @@ @@ -748,6 +748,10 @@
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\AsyncDiscoveryState.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\DiscoveryNetworkCredential.cs" />
<Compile Include="Src\Services\ProjectService\ProjectLoader.cs" />
<Compile Include="Src\Util\ProcessRunnerException.cs" />
<Compile Include="Src\Util\LineReceivedEventArgs.cs" />
<Compile Include="Src\Util\OutputReader.cs" />
<Compile Include="Src\Util\ProcessRunner.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj">
@ -772,6 +776,7 @@ @@ -772,6 +776,7 @@
<Content Include="..\..\..\..\AddIns\ICSharpCode.SharpDevelop.addin">
<Link>ICSharpCode.SharpDevelop.addin</Link>
</Content>
<Folder Include="Src\Util" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
</Project>

2
src/AddIns/Misc/CodeCoverage/Project/Src/LineReceivedEventArgs.cs → src/Main/Base/Project/Src/Util/LineReceivedEventArgs.cs

@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
using System;
namespace ICSharpCode.CodeCoverage
namespace ICSharpCode.SharpDevelop.Util
{
public delegate void LineReceivedEventHandler(object sender, LineReceivedEventArgs e);

3
src/AddIns/Misc/NAntAddIn/Project/Src/OutputReader.cs → src/Main/Base/Project/Src/Util/OutputReader.cs

@ -11,7 +11,7 @@ using System.IO; @@ -11,7 +11,7 @@ using System.IO;
using System.Text;
using System.Threading;
namespace ICSharpCode.NAntAddIn
namespace ICSharpCode.SharpDevelop.Util
{
/// <summary>
/// A threaded <see cref="Process.StandardOutput"/> or
@ -74,7 +74,6 @@ namespace ICSharpCode.NAntAddIn @@ -74,7 +74,6 @@ namespace ICSharpCode.NAntAddIn
/// </summary>
void ReadOutput()
{
//output = reader.ReadToEnd();
output = String.Empty;
StringBuilder outputBuilder = new StringBuilder();

2
src/AddIns/Misc/NAntAddIn/Project/Src/ProcessRunner.cs → src/Main/Base/Project/Src/Util/ProcessRunner.cs

@ -10,7 +10,7 @@ using System; @@ -10,7 +10,7 @@ using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace ICSharpCode.NAntAddIn
namespace ICSharpCode.SharpDevelop.Util
{
/// <summary>
/// Runs a process that sends output to standard output and to

2
src/AddIns/Misc/NAntAddIn/Project/Src/ProcessRunnerException.cs → src/Main/Base/Project/Src/Util/ProcessRunnerException.cs

@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
using System;
namespace ICSharpCode.NAntAddIn
namespace ICSharpCode.SharpDevelop.Util
{
/// <summary>
/// An exception thrown by a <see cref="ProcessRunner"/>

12
src/AddIns/Misc/NAntAddIn/Test/CancelLongRunningAppTestFixture.cs → src/Main/Base/Test/CancelLongRunningAppTestFixture.cs

@ -9,13 +9,13 @@ using System; @@ -9,13 +9,13 @@ using System;
using System.Diagnostics;
using System.IO;
using NUnit.Framework;
using ICSharpCode.NAntAddIn;
using ICSharpCode.SharpDevelop.Util;
namespace ICSharpCode.NAntAddIn.Tests
namespace ICSharpCode.SharpDevelop.Tests
{
[TestFixture]
//[Ignore("Ignoring since need to run ConsoleApp.exe")]
public class CancelLongRunningAppTestFixture
public class CancelLongRunningAppTestFixture : ConsoleAppTestFixtureBase
{
ProcessRunner runner;
@ -23,15 +23,15 @@ namespace ICSharpCode.NAntAddIn.Tests @@ -23,15 +23,15 @@ namespace ICSharpCode.NAntAddIn.Tests
public void Init()
{
runner = new ProcessRunner();
runner.WorkingDirectory = Path.GetDirectoryName(Config.ConsoleAppFilename);
runner.WorkingDirectory = Path.GetDirectoryName(GetConsoleAppFileName());
}
[Test]
public void Cancel()
{
runner.Start(Config.ConsoleAppFilename, "-forever");
runner.Start(GetConsoleAppFileName(), "-forever");
string processName = Path.GetFileName(Config.ConsoleAppFilename);
string processName = Path.GetFileName(GetConsoleAppFileName());
processName = Path.ChangeExtension(processName, null);
// Check console app is running.

0
src/AddIns/Misc/NAntAddIn/ConsoleApp/AssemblyInfo.cs → src/Main/Base/Test/ConsoleApp/AssemblyInfo.cs

0
src/AddIns/Misc/NAntAddIn/ConsoleApp/ConsoleApp.cs → src/Main/Base/Test/ConsoleApp/ConsoleApp.cs

0
src/AddIns/Misc/NAntAddIn/ConsoleApp/ConsoleApp.csproj → src/Main/Base/Test/ConsoleApp/ConsoleApp.csproj

0
src/AddIns/Misc/NAntAddIn/ConsoleApp/ConsoleApp.sln → src/Main/Base/Test/ConsoleApp/ConsoleApp.sln

BIN
src/Main/Base/Test/ConsoleApp/bin/ConsoleApp.exe

Binary file not shown.

19
src/Main/Base/Test/ConsoleAppTestFixtureBase.cs

@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using System;
namespace ICSharpCode.SharpDevelop.Tests
{
public class ConsoleAppTestFixtureBase
{
public static string GetConsoleAppFileName()
{
return typeof(ICSharpCode.NAntAddIn.Tests.ConsoleApp.ConsoleApp).Assembly.Location;
}
}
}

10
src/AddIns/Misc/NAntAddIn/Test/ExitCodeTestFixture.cs → src/Main/Base/Test/ExitCodeTestFixture.cs

@ -5,12 +5,12 @@ @@ -5,12 +5,12 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.NAntAddIn;
using ICSharpCode.SharpDevelop.Util;
using NUnit.Framework;
using System;
using System.IO;
namespace ICSharpCode.NAntAddIn.Tests
namespace ICSharpCode.SharpDevelop.Tests
{
/// <summary>
/// Tests that exit codes are read correctly by the
@ -18,19 +18,19 @@ namespace ICSharpCode.NAntAddIn.Tests @@ -18,19 +18,19 @@ namespace ICSharpCode.NAntAddIn.Tests
/// </summary>
[TestFixture]
//[Ignore("Ignoring since need to run ConsoleApp.exe")]
public class ExitCodeTestFixture
public class ExitCodeTestFixture : ConsoleAppTestFixtureBase
{
[Test]
public void NonZeroExitCode()
{
ProcessRunner runner = new ProcessRunner();
runner.WorkingDirectory = Path.GetDirectoryName(Config.ConsoleAppFilename);
runner.WorkingDirectory = Path.GetDirectoryName(GetConsoleAppFileName());
int expectedExitCode = 1;
Assert.IsFalse(runner.IsRunning, "IsRunning should be false.");
runner.Start(Config.ConsoleAppFilename, String.Concat("-exitcode:", expectedExitCode.ToString()));
runner.Start(GetConsoleAppFileName(), String.Concat("-exitcode:", expectedExitCode.ToString()));
runner.WaitForExit();
Assert.AreEqual(expectedExitCode, runner.ExitCode, "Exit code is incorrect.");

12
src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj

@ -41,6 +41,10 @@ @@ -41,6 +41,10 @@
<HintPath>..\..\..\Tools\NUnit\nunit.framework.dll</HintPath>
<SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="ConsoleApp">
<HintPath>ConsoleApp\bin\ConsoleApp.exe</HintPath>
<SpecificVersion>False</SpecificVersion>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs" />
@ -72,6 +76,14 @@ @@ -72,6 +76,14 @@
<Compile Include="Templates\FileTemplateCategoryComparerTests.cs" />
<Compile Include="WebReferences\HttpAuthenticationHeaderTests.cs" />
<Compile Include="OutputTextLineParserTestFixture.cs" />
<Compile Include="StandardOutputFromProcessTestFixture.cs" />
<Compile Include="CancelLongRunningAppTestFixture.cs" />
<Compile Include="ExitCodeTestFixture.cs" />
<Compile Include="LineReceivedFromProcessTestFixture.cs" />
<Compile Include="NoSuchExecutableTestFixture.cs" />
<Compile Include="ProcessExitedTestFixture.cs" />
<Compile Include="ProcessRunnerNotStartedTestFixture.cs" />
<Compile Include="ConsoleAppTestFixtureBase.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Project\ICSharpCode.SharpDevelop.csproj">

10
src/AddIns/Misc/NAntAddIn/Test/LineReceivedFromProcessTestFixture.cs → src/Main/Base/Test/LineReceivedFromProcessTestFixture.cs

@ -6,18 +6,18 @@ @@ -6,18 +6,18 @@
// </file>
using NUnit.Framework;
using ICSharpCode.NAntAddIn;
using ICSharpCode.SharpDevelop.Util;
using System;
using System.Collections;
using System.IO;
namespace ICSharpCode.NAntAddIn.Tests
namespace ICSharpCode.SharpDevelop.Tests
{
/// <summary>
/// Tests the <see cref="ProcessRunner.LineReceived"/> event.
/// </summary>
[TestFixture]
public class LineReceivedFromProcessTestFixture
public class LineReceivedFromProcessTestFixture : ConsoleAppTestFixtureBase
{
ProcessRunner runner;
ArrayList lines;
@ -27,7 +27,7 @@ namespace ICSharpCode.NAntAddIn.Tests @@ -27,7 +27,7 @@ namespace ICSharpCode.NAntAddIn.Tests
{
lines = new ArrayList();
runner = new ProcessRunner();
runner.WorkingDirectory = Path.GetDirectoryName(Config.ConsoleAppFilename);
runner.WorkingDirectory = Path.GetDirectoryName(GetConsoleAppFileName());
}
[Test]
@ -38,7 +38,7 @@ namespace ICSharpCode.NAntAddIn.Tests @@ -38,7 +38,7 @@ namespace ICSharpCode.NAntAddIn.Tests
runner.OutputLineReceived += new LineReceivedEventHandler(OutputLineReceived);
runner.Start(Config.ConsoleAppFilename, String.Concat("-echo:", echoText));
runner.Start(GetConsoleAppFileName(), String.Concat("-echo:", echoText));
runner.WaitForExit();
Assert.AreEqual(0, runner.ExitCode, "Exit code should be zero.");

4
src/AddIns/Misc/NAntAddIn/Test/NoSuchExecutableTestFixture.cs → src/Main/Base/Test/NoSuchExecutableTestFixture.cs

@ -8,9 +8,9 @@ @@ -8,9 +8,9 @@
using System;
using System.ComponentModel;
using NUnit.Framework;
using ICSharpCode.NAntAddIn;
using ICSharpCode.SharpDevelop.Util;
namespace ICSharpCode.NAntAddIn.Tests
namespace ICSharpCode.SharpDevelop.Tests
{
[TestFixture]
public class NoSuchExecutableTestFixture

10
src/AddIns/Misc/NAntAddIn/Test/ProcessExitedTestFixture.cs → src/Main/Base/Test/ProcessExitedTestFixture.cs

@ -5,18 +5,18 @@ @@ -5,18 +5,18 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.NAntAddIn;
using ICSharpCode.SharpDevelop.Util;
using NUnit.Framework;
using System;
using System.Diagnostics;
using System.IO;
using System.Threading;
namespace ICSharpCode.NAntAddIn.Tests
namespace ICSharpCode.SharpDevelop.Tests
{
[TestFixture]
//[Ignore("Ignoring since need to run ConsoleApp.exe")]
public class ProcessExitedTestFixture
public class ProcessExitedTestFixture : ConsoleAppTestFixtureBase
{
/// <summary>
/// Stores standard output received by the ProcessExit event.
@ -46,14 +46,14 @@ namespace ICSharpCode.NAntAddIn.Tests @@ -46,14 +46,14 @@ namespace ICSharpCode.NAntAddIn.Tests
{
exitEvent = new AutoResetEvent(false);
ProcessRunner runner = new ProcessRunner();
runner.WorkingDirectory = Path.GetDirectoryName(Config.ConsoleAppFilename);
runner.WorkingDirectory = Path.GetDirectoryName(GetConsoleAppFileName());
string echoText = "Test";
string expectedOutput = String.Concat(echoText, "\r\n");
runner.ProcessExited += new EventHandler(OnProcessExited);
runner.Start(Config.ConsoleAppFilename, String.Concat("-echo:", echoText));
runner.Start(GetConsoleAppFileName(), String.Concat("-echo:", echoText));
bool exited = exitEvent.WaitOne(500, true);
Assert.IsTrue(exited, "Timed out waiting for exit event.");

4
src/AddIns/Misc/NAntAddIn/Test/ProcessRunnerNotStartedTestFixture.cs → src/Main/Base/Test/ProcessRunnerNotStartedTestFixture.cs

@ -7,9 +7,9 @@ @@ -7,9 +7,9 @@
using System;
using NUnit.Framework;
using ICSharpCode.NAntAddIn;
using ICSharpCode.SharpDevelop.Util;
namespace ICSharpCode.NAntAddIn.Tests
namespace ICSharpCode.SharpDevelop.Tests
{
/// <summary>
/// Checks that the <see cref="ProcessRunner"/> responds

26
src/AddIns/Misc/NAntAddIn/Test/StandardOutputFromProcessTestFixture.cs → src/Main/Base/Test/StandardOutputFromProcessTestFixture.cs

@ -5,21 +5,21 @@ @@ -5,21 +5,21 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.NAntAddIn;
using ICSharpCode.SharpDevelop.Util;
using NUnit.Framework;
using System;
using System.Diagnostics;
using System.IO;
using System.Text;
namespace ICSharpCode.NAntAddIn.Tests
namespace ICSharpCode.SharpDevelop.Tests
{
/// <summary>
/// Runs a process that returns some text on the standard output.
/// </summary>
[TestFixture]
//[Ignore("Ignoring since need to run ConsoleApp.exe")]
public class StandardOutputFromProcessTestFixture
public class StandardOutputFromProcessTestFixture : ConsoleAppTestFixtureBase
{
int preTestThreadCount;
@ -47,11 +47,11 @@ namespace ICSharpCode.NAntAddIn.Tests @@ -47,11 +47,11 @@ namespace ICSharpCode.NAntAddIn.Tests
public void SingleLineOfOutput()
{
ProcessRunner runner = new ProcessRunner();
runner.WorkingDirectory = Path.GetDirectoryName(Config.ConsoleAppFilename);
runner.WorkingDirectory = Path.GetDirectoryName(GetConsoleAppFileName());
string echoText = "Test";
string expectedOutput = String.Concat(echoText, "\r\n");
runner.Start(Config.ConsoleAppFilename, String.Concat("-echo:", echoText));
runner.Start(GetConsoleAppFileName(), String.Concat("-echo:", echoText));
runner.WaitForExit();
Assert.IsFalse(runner.IsRunning, "IsRunning should be false.");
@ -67,9 +67,9 @@ namespace ICSharpCode.NAntAddIn.Tests @@ -67,9 +67,9 @@ namespace ICSharpCode.NAntAddIn.Tests
public void NoOutput()
{
ProcessRunner runner = new ProcessRunner();
runner.WorkingDirectory = Path.GetDirectoryName(Config.ConsoleAppFilename);
runner.WorkingDirectory = Path.GetDirectoryName(GetConsoleAppFileName());
runner.Start(Config.ConsoleAppFilename);
runner.Start(GetConsoleAppFileName());
runner.WaitForExit();
Assert.IsFalse(runner.IsRunning, "IsRunning should be false.");
@ -86,7 +86,7 @@ namespace ICSharpCode.NAntAddIn.Tests @@ -86,7 +86,7 @@ namespace ICSharpCode.NAntAddIn.Tests
public void LargeAmountOfOutput()
{
ProcessRunner runner = new ProcessRunner();
runner.WorkingDirectory = Path.GetDirectoryName(Config.ConsoleAppFilename);
runner.WorkingDirectory = Path.GetDirectoryName(GetConsoleAppFileName());
string filename = "test.txt";
string fullFilename = Path.Combine(runner.WorkingDirectory, filename);
@ -95,7 +95,7 @@ namespace ICSharpCode.NAntAddIn.Tests @@ -95,7 +95,7 @@ namespace ICSharpCode.NAntAddIn.Tests
{
string outputText = GetOutputText();
CreateTextFile(fullFilename, outputText);
runner.Start(Config.ConsoleAppFilename, String.Concat("-file:", filename));
runner.Start(GetConsoleAppFileName(), String.Concat("-file:", filename));
bool exited = runner.WaitForExit(500);
Assert.IsTrue(exited, "App did not exit.");
@ -120,7 +120,7 @@ namespace ICSharpCode.NAntAddIn.Tests @@ -120,7 +120,7 @@ namespace ICSharpCode.NAntAddIn.Tests
public void LargeAmountOfErrorOutput()
{
ProcessRunner runner = new ProcessRunner();
runner.WorkingDirectory = Path.GetDirectoryName(Config.ConsoleAppFilename);
runner.WorkingDirectory = Path.GetDirectoryName(GetConsoleAppFileName());
string filename = "test.txt";
string fullFilename = Path.Combine(runner.WorkingDirectory, filename);
@ -129,7 +129,7 @@ namespace ICSharpCode.NAntAddIn.Tests @@ -129,7 +129,7 @@ namespace ICSharpCode.NAntAddIn.Tests
{
string outputText = GetOutputText();
CreateTextFile(fullFilename, outputText);
runner.Start(Config.ConsoleAppFilename, String.Concat("-error.file:", filename));
runner.Start(GetConsoleAppFileName(), String.Concat("-error.file:", filename));
bool exited = runner.WaitForExit(500);
Assert.IsTrue(exited, "App did not exit.");
@ -154,11 +154,11 @@ namespace ICSharpCode.NAntAddIn.Tests @@ -154,11 +154,11 @@ namespace ICSharpCode.NAntAddIn.Tests
public void SingleLineOfErrorOutput()
{
ProcessRunner runner = new ProcessRunner();
runner.WorkingDirectory = Path.GetDirectoryName(Config.ConsoleAppFilename);
runner.WorkingDirectory = Path.GetDirectoryName(GetConsoleAppFileName());
string echoText = "Test";
string expectedOutput = String.Concat(echoText, "\r\n");
runner.Start(Config.ConsoleAppFilename, String.Concat("-error.echo:", echoText));
runner.Start(GetConsoleAppFileName(), String.Concat("-error.echo:", echoText));
runner.WaitForExit();
Assert.AreEqual(0, runner.ExitCode, "Exit code is incorrect.");

14
src/SharpDevelop.Tests.sln

@ -1,9 +1,13 @@ @@ -1,9 +1,13 @@
Microsoft Visual Studio Solution File, Format Version 9.00
# SharpDevelop 2.0.0.1069
# SharpDevelop 2.0.0.1084
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{14A277EE-7DF1-4529-B639-7D1EF334C1C5}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NAntAddIn.Tests", "AddIns\Misc\NAntAddIn\Test\NAntAddIn.Tests.csproj", "{13AB8351-39E5-4F9D-A59C-B30D60CF6B8C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NAntAddIn", "AddIns\Misc\NAntAddIn\Project\NAntAddIn.csproj", "{1DB3CAD2-38E8-4C5E-8E1B-0E37B1A5C006}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "AddIns\Misc\UnitTesting\UnitTesting.csproj", "{1F261725-6318-4434-A1B1-6C70CE4CD324}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage", "AddIns\Misc\CodeCoverage\Project\CodeCoverage.csproj", "{08ce9972-283b-44f4-82fa-966f7dfa6b7a}"
@ -42,10 +46,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{ @@ -42,10 +46,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NAntAddIn.Tests", "AddIns\Misc\NAntAddIn\Test\NAntAddIn.Tests.csproj", "{13AB8351-39E5-4F9D-A59C-B30D60CF6B8C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NAntAddIn", "AddIns\Misc\NAntAddIn\Project\NAntAddIn.csproj", "{1DB3CAD2-38E8-4C5E-8E1B-0E37B1A5C006}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Build.Tasks.Tests", "Libraries\ICSharpCode.Build.Tasks\Test\ICSharpCode.Build.Tasks.Tests.csproj", "{B7C2A664-B454-4920-AC6E-318F5274B2EF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor.Tests", "Libraries\ICSharpCode.TextEditor\Test\ICSharpCode.TextEditor.Tests.csproj", "{6259D767-BA7C-484D-9472-68F350A20086}"
@ -223,6 +223,8 @@ Global @@ -223,6 +223,8 @@ Global
{A5C0E8F8-9D04-46ED-91D6-1DEF1575313B} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{08ce9972-283b-44f4-82fa-966f7dfa6b7a} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{1F261725-6318-4434-A1B1-6C70CE4CD324} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{1DB3CAD2-38E8-4C5E-8E1B-0E37B1A5C006} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{13AB8351-39E5-4F9D-A59C-B30D60CF6B8C} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{B08385CD-F0CC-488C-B4F4-EEB34B6D2688} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
@ -234,8 +236,6 @@ Global @@ -234,8 +236,6 @@ Global
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{6259D767-BA7C-484D-9472-68F350A20086} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{B7C2A664-B454-4920-AC6E-318F5274B2EF} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{1DB3CAD2-38E8-4C5E-8E1B-0E37B1A5C006} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{13AB8351-39E5-4F9D-A59C-B30D60CF6B8C} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{1152B71B-3C05-4598-B20D-823B5D40559E} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{2748AD25-9C63-4E12-877B-4DCE96FBED54} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}

Loading…
Cancel
Save