From 33ba99bb51399d169e5d38ab9852f60c870724b1 Mon Sep 17 00:00:00 2001 From: Livar Cunha Date: Mon, 22 Feb 2016 13:40:45 -0800 Subject: [PATCH] Adding a TestRunner.TestCompleted message that the runner can send to dotnet test. --- .../ITestDiscoverySink.cs | 2 +- .../ITestExecutionSink.cs | 2 +- .../ITestSink.cs | 10 ++++++++ .../LineDelimitedJsonStream.cs | 2 +- .../StreamingTestDiscoverySink.cs | 9 +++---- .../StreamingTestExecutionSink.cs | 16 ++++++------ .../StreamingTestSink.cs | 25 +++++++++++++++++++ 7 files changed, 49 insertions(+), 17 deletions(-) create mode 100644 src/Microsoft.Extensions.Testing.Abstractions/ITestSink.cs create mode 100644 src/Microsoft.Extensions.Testing.Abstractions/StreamingTestSink.cs diff --git a/src/Microsoft.Extensions.Testing.Abstractions/ITestDiscoverySink.cs b/src/Microsoft.Extensions.Testing.Abstractions/ITestDiscoverySink.cs index 0529c1a3b..b5e6d4f49 100644 --- a/src/Microsoft.Extensions.Testing.Abstractions/ITestDiscoverySink.cs +++ b/src/Microsoft.Extensions.Testing.Abstractions/ITestDiscoverySink.cs @@ -3,7 +3,7 @@ namespace Microsoft.Extensions.Testing.Abstractions { - public interface ITestDiscoverySink + public interface ITestDiscoverySink : ITestSink { void SendTestFound(Test test); } diff --git a/src/Microsoft.Extensions.Testing.Abstractions/ITestExecutionSink.cs b/src/Microsoft.Extensions.Testing.Abstractions/ITestExecutionSink.cs index 0557a2287..a58b92e75 100644 --- a/src/Microsoft.Extensions.Testing.Abstractions/ITestExecutionSink.cs +++ b/src/Microsoft.Extensions.Testing.Abstractions/ITestExecutionSink.cs @@ -3,7 +3,7 @@ namespace Microsoft.Extensions.Testing.Abstractions { - public interface ITestExecutionSink + public interface ITestExecutionSink : ITestSink { void SendTestStarted(Test test); diff --git a/src/Microsoft.Extensions.Testing.Abstractions/ITestSink.cs b/src/Microsoft.Extensions.Testing.Abstractions/ITestSink.cs new file mode 100644 index 000000000..e67b80514 --- /dev/null +++ b/src/Microsoft.Extensions.Testing.Abstractions/ITestSink.cs @@ -0,0 +1,10 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +namespace Microsoft.Extensions.Testing.Abstractions +{ + public interface ITestSink + { + void SendTestCompleted(); + } +} diff --git a/src/Microsoft.Extensions.Testing.Abstractions/LineDelimitedJsonStream.cs b/src/Microsoft.Extensions.Testing.Abstractions/LineDelimitedJsonStream.cs index c7ef529d8..55d9d926c 100644 --- a/src/Microsoft.Extensions.Testing.Abstractions/LineDelimitedJsonStream.cs +++ b/src/Microsoft.Extensions.Testing.Abstractions/LineDelimitedJsonStream.cs @@ -6,7 +6,7 @@ using Newtonsoft.Json; namespace Microsoft.Extensions.Testing.Abstractions { - class LineDelimitedJsonStream + public class LineDelimitedJsonStream { private readonly StreamWriter _stream; diff --git a/src/Microsoft.Extensions.Testing.Abstractions/StreamingTestDiscoverySink.cs b/src/Microsoft.Extensions.Testing.Abstractions/StreamingTestDiscoverySink.cs index 713ce446b..5e49f67f2 100644 --- a/src/Microsoft.Extensions.Testing.Abstractions/StreamingTestDiscoverySink.cs +++ b/src/Microsoft.Extensions.Testing.Abstractions/StreamingTestDiscoverySink.cs @@ -4,13 +4,10 @@ using Newtonsoft.Json.Linq; namespace Microsoft.Extensions.Testing.Abstractions { - public class StreamingTestDiscoverySink : ITestDiscoverySink + public class StreamingTestDiscoverySink : StreamingTestSink, ITestDiscoverySink { - private readonly LineDelimitedJsonStream _stream; - - public StreamingTestDiscoverySink(Stream stream) + public StreamingTestDiscoverySink(Stream stream) : base(stream) { - _stream = new LineDelimitedJsonStream(stream); } public void SendTestFound(Test test) @@ -20,7 +17,7 @@ namespace Microsoft.Extensions.Testing.Abstractions throw new ArgumentNullException(nameof(test)); } - _stream.Send(new Message + Stream.Send(new Message { MessageType = "TestDiscovery.TestFound", Payload = JToken.FromObject(test), diff --git a/src/Microsoft.Extensions.Testing.Abstractions/StreamingTestExecutionSink.cs b/src/Microsoft.Extensions.Testing.Abstractions/StreamingTestExecutionSink.cs index 240ca788d..74a9b679f 100644 --- a/src/Microsoft.Extensions.Testing.Abstractions/StreamingTestExecutionSink.cs +++ b/src/Microsoft.Extensions.Testing.Abstractions/StreamingTestExecutionSink.cs @@ -1,3 +1,6 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + using System; using System.Collections.Concurrent; using System.IO; @@ -5,18 +8,15 @@ using Newtonsoft.Json.Linq; namespace Microsoft.Extensions.Testing.Abstractions { - public class StreamingTestExecutionSink : ITestExecutionSink + public class StreamingTestExecutionSink : StreamingTestSink, ITestExecutionSink { - private readonly LineDelimitedJsonStream _stream; private readonly ConcurrentDictionary _runningTests; - - public StreamingTestExecutionSink(Stream stream) + public StreamingTestExecutionSink(Stream stream) : base(stream) { - _stream = new LineDelimitedJsonStream(stream); _runningTests = new ConcurrentDictionary(); } - + public void SendTestStarted(Test test) { if (test == null) @@ -30,7 +30,7 @@ namespace Microsoft.Extensions.Testing.Abstractions _runningTests.TryAdd(test.FullyQualifiedName, state); } - _stream.Send(new Message + Stream.Send(new Message { MessageType = "TestExecution.TestStarted", Payload = JToken.FromObject(test), @@ -57,7 +57,7 @@ namespace Microsoft.Extensions.Testing.Abstractions testResult.EndTime = DateTimeOffset.Now; } - _stream.Send(new Message + Stream.Send(new Message { MessageType = "TestExecution.TestResult", Payload = JToken.FromObject(testResult), diff --git a/src/Microsoft.Extensions.Testing.Abstractions/StreamingTestSink.cs b/src/Microsoft.Extensions.Testing.Abstractions/StreamingTestSink.cs new file mode 100644 index 000000000..b647fd24a --- /dev/null +++ b/src/Microsoft.Extensions.Testing.Abstractions/StreamingTestSink.cs @@ -0,0 +1,25 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.IO; + +namespace Microsoft.Extensions.Testing.Abstractions +{ + public abstract class StreamingTestSink : ITestSink + { + protected LineDelimitedJsonStream Stream { get; } + + protected StreamingTestSink(Stream stream) + { + Stream = new LineDelimitedJsonStream(stream); + } + + public void SendTestCompleted() + { + Stream.Send(new Message + { + MessageType = "TestRunner.TestCompleted" + }); + } + } +}