68 lines
2.3 KiB
C#
68 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);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|