提交 9cba5f0d 编写于 作者: J Jared Parsons

Added cancellation to the test runner

上级 3052f6fb
......@@ -8,6 +8,7 @@
using Microsoft.CodeAnalysis.Shared.Extensions;
using Microsoft.CodeAnalysis.Shared.Utilities;
using Microsoft.VisualStudio.Composition;
using Roslyn.Test.Utilities;
using Xunit;
namespace Microsoft.CodeAnalysis.Editor.UnitTests.CodeFixes
......
......@@ -5,6 +5,7 @@
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace RunTests
......@@ -39,10 +40,17 @@ internal static int Main(string[] args)
? Path.Combine(xunitPath, "xunit.console.exe")
: Path.Combine(xunitPath, "xunit.console.x86.exe");
// Setup cancellation for ctrl-c key presses
var cts = new CancellationTokenSource();
Console.CancelKeyPress += delegate
{
cts.Cancel();
};
var testRunner = new TestRunner(xunit);
var start = DateTime.Now;
Console.WriteLine("Running {0} tests", list.Count);
var result = testRunner.RunAll(list).Result;
var result = testRunner.RunAllAsync(list, cts.Token).Result;
var span = DateTime.Now - start;
if (!result)
{
......
......@@ -37,7 +37,7 @@ internal TestRunner(string xunitConsolePath)
_xunitConsolePath = xunitConsolePath;
}
internal async Task<bool> RunAll(IEnumerable<string> assemblyList)
internal async Task<bool> RunAllAsync(IEnumerable<string> assemblyList, CancellationToken cancellationToken)
{
var max = Environment.ProcessorCount;
var allPassed = true;
......@@ -47,6 +47,8 @@ internal async Task<bool> RunAll(IEnumerable<string> assemblyList)
do
{
cancellationToken.ThrowIfCancellationRequested();
var i = 0;
while (i < running.Count)
{
......@@ -70,7 +72,7 @@ internal async Task<bool> RunAll(IEnumerable<string> assemblyList)
while (running.Count < max && waiting.Count > 0)
{
var task = RunTest(waiting.Pop());
var task = RunTest(waiting.Pop(), cancellationToken);
running.Add(task);
}
......@@ -102,7 +104,7 @@ private void Print(List<TestResult> testResults)
Console.WriteLine("================");
}
private async Task<TestResult> RunTest(string assemblyPath)
private async Task<TestResult> RunTest(string assemblyPath, CancellationToken cancellationToken)
{
var assemblyName = Path.GetFileName(assemblyPath);
var resultsPath = Path.Combine(Path.GetDirectoryName(assemblyPath), Path.ChangeExtension(assemblyName, ".html"));
......@@ -121,7 +123,7 @@ private async Task<TestResult> RunTest(string assemblyPath)
lowPriority: false,
displayWindow: false,
captureOutput: true,
cancellationToken: CancellationToken.None).ConfigureAwait(false);
cancellationToken: cancellationToken).ConfigureAwait(false);
var span = DateTime.UtcNow - start;
if (processOutput.ExitCode != 0)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册