
Adding a message handler for the version check message. Also introduced an IDotnetTest that handles state and handlers (the state machine). Adding the test discover start message handler and introducing a test runner. Added the handler for the GetTestRunnerProcessInfo message. Also, modified dotnet test to have separate setter for the special message handlers for terminate and unknown messages and added a separate method to add new reporting channels to DotnetTest, so that it can handle the new listener for the test runner. Added the test runner test discovery handlers. Added handlers to deal with the test execution itself. Updated dotnet-test program to use the message handlers during design time. Added a test for the whole discover tests message flow. Added a test for the run tests full message exchange.
67 lines
2.3 KiB
C#
67 lines
2.3 KiB
C#
// 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 Microsoft.Extensions.Testing.Abstractions;
|
|
|
|
namespace Microsoft.DotNet.Tools.Test
|
|
{
|
|
public class TestRunnerTestCompletedMessageHandler : IDotnetTestMessageHandler
|
|
{
|
|
private readonly IReportingChannel _adapterChannel;
|
|
|
|
public TestRunnerTestCompletedMessageHandler(IReportingChannel adapterChannel)
|
|
{
|
|
_adapterChannel = adapterChannel;
|
|
}
|
|
|
|
public DotnetTestState HandleMessage(IDotnetTest dotnetTest, Message message)
|
|
{
|
|
var nextState = DotnetTestState.NoOp;
|
|
if (CanHandleMessage(dotnetTest, message))
|
|
{
|
|
DoHandleMessage(dotnetTest, message);
|
|
nextState = NextState(dotnetTest);
|
|
}
|
|
|
|
return nextState;
|
|
}
|
|
|
|
private void DoHandleMessage(IDotnetTest dotnetTest, Message message)
|
|
{
|
|
_adapterChannel.Send(new Message
|
|
{
|
|
MessageType = MessageType(dotnetTest)
|
|
});
|
|
}
|
|
|
|
private string MessageType(IDotnetTest dotnetTest)
|
|
{
|
|
return dotnetTest.State == DotnetTestState.TestDiscoveryStarted
|
|
? TestMessageTypes.TestDiscoveryCompleted
|
|
: TestMessageTypes.TestExecutionCompleted;
|
|
}
|
|
|
|
private DotnetTestState NextState(IDotnetTest dotnetTest)
|
|
{
|
|
return dotnetTest.State == DotnetTestState.TestDiscoveryStarted
|
|
? DotnetTestState.TestDiscoveryCompleted
|
|
: DotnetTestState.TestExecutionCompleted;
|
|
}
|
|
|
|
private bool CanHandleMessage(IDotnetTest dotnetTest, Message message)
|
|
{
|
|
return IsAtAnAcceptableState(dotnetTest) && CanAcceptMessage(message);
|
|
}
|
|
|
|
private static bool CanAcceptMessage(Message message)
|
|
{
|
|
return message.MessageType == TestMessageTypes.TestRunnerTestCompleted;
|
|
}
|
|
|
|
private static bool IsAtAnAcceptableState(IDotnetTest dotnetTest)
|
|
{
|
|
return (dotnetTest.State == DotnetTestState.TestDiscoveryStarted ||
|
|
dotnetTest.State == DotnetTestState.TestExecutionStarted);
|
|
}
|
|
}
|
|
}
|