diff --git a/src/dotnet/commands/dotnet-test/MessageHandlers/GetTestRunnerProcessStartInfoMessageHandler.cs b/src/dotnet/commands/dotnet-test/MessageHandlers/GetTestRunnerProcessStartInfoMessageHandler.cs index a95cc3a06..aa7ed47a6 100644 --- a/src/dotnet/commands/dotnet-test/MessageHandlers/GetTestRunnerProcessStartInfoMessageHandler.cs +++ b/src/dotnet/commands/dotnet-test/MessageHandlers/GetTestRunnerProcessStartInfoMessageHandler.cs @@ -55,8 +55,14 @@ namespace Microsoft.DotNet.Tools.Test private static bool CanHandleMessage(IDotnetTest dotnetTest, Message message) { - return dotnetTest.State == DotnetTestState.VersionCheckCompleted && + return IsAtAnAcceptableState(dotnetTest) && message.MessageType == TestMessageTypes.TestExecutionGetTestRunnerProcessStartInfo; } + + private static bool IsAtAnAcceptableState(IDotnetTest dotnetTest) + { + return dotnetTest.State == DotnetTestState.VersionCheckCompleted || + dotnetTest.State == DotnetTestState.InitialState; + } } } diff --git a/src/dotnet/commands/dotnet-test/MessageHandlers/TestDiscoveryStartMessageHandler.cs b/src/dotnet/commands/dotnet-test/MessageHandlers/TestDiscoveryStartMessageHandler.cs index f4088f2d6..a791ee776 100644 --- a/src/dotnet/commands/dotnet-test/MessageHandlers/TestDiscoveryStartMessageHandler.cs +++ b/src/dotnet/commands/dotnet-test/MessageHandlers/TestDiscoveryStartMessageHandler.cs @@ -68,8 +68,13 @@ namespace Microsoft.DotNet.Cli.Tools.Test private static bool CanHandleMessage(IDotnetTest dotnetTest, Message message) { - return dotnetTest.State == DotnetTestState.VersionCheckCompleted && - message.MessageType == TestMessageTypes.TestDiscoveryStart; + return IsAtAnAcceptableState(dotnetTest) && message.MessageType == TestMessageTypes.TestDiscoveryStart; + } + + private static bool IsAtAnAcceptableState(IDotnetTest dotnetTest) + { + return (dotnetTest.State == DotnetTestState.VersionCheckCompleted || + dotnetTest.State == DotnetTestState.InitialState); } } } diff --git a/test/dotnet-test.UnitTests/GivenATestDiscoveryStartMessageHandler.cs b/test/dotnet-test.UnitTests/GivenATestDiscoveryStartMessageHandler.cs index 36cedfe36..c82effcf9 100644 --- a/test/dotnet-test.UnitTests/GivenATestDiscoveryStartMessageHandler.cs +++ b/test/dotnet-test.UnitTests/GivenATestDiscoveryStartMessageHandler.cs @@ -61,7 +61,7 @@ namespace Microsoft.Dotnet.Tools.Test.Tests } [Fact] - public void It_returns_NoOp_if_the_dotnet_test_state_is_not_VersionCheckCompleted() + public void It_returns_NoOp_if_the_dotnet_test_state_is_not_VersionCheckCompleted_or_InitialState() { var dotnetTestMock = new Mock(); dotnetTestMock.Setup(d => d.State).Returns(DotnetTestState.Terminated); @@ -84,7 +84,19 @@ namespace Microsoft.Dotnet.Tools.Test.Tests } [Fact] - public void It_returns_TestDiscoveryCompleted_when_it_handles_the_message() + public void It_returns_TestDiscoveryCompleted_when_it_handles_the_message_and_current_state_is_InitialState() + { + var dotnetTestMock = new Mock(); + dotnetTestMock.Setup(d => d.State).Returns(DotnetTestState.InitialState); + + var nextState = + _testDiscoveryStartMessageHandler.HandleMessage(dotnetTestMock.Object, _validMessage); + + nextState.Should().Be(DotnetTestState.TestDiscoveryStarted); + } + + [Fact] + public void It_returns_TestDiscoveryCompleted_when_it_handles_the_message_and_current_state_is_VersionCheckCompleted() { var nextState = _testDiscoveryStartMessageHandler.HandleMessage(_dotnetTestAtVersionCheckCompletedState, _validMessage); diff --git a/test/dotnet-test.UnitTests/GivenATestExecutionGetTestRunnerProcessStartInfoMessageHandler.cs b/test/dotnet-test.UnitTests/GivenATestExecutionGetTestRunnerProcessStartInfoMessageHandler.cs index be0f7555b..cd14ab1c9 100644 --- a/test/dotnet-test.UnitTests/GivenATestExecutionGetTestRunnerProcessStartInfoMessageHandler.cs +++ b/test/dotnet-test.UnitTests/GivenATestExecutionGetTestRunnerProcessStartInfoMessageHandler.cs @@ -68,7 +68,7 @@ namespace Microsoft.Dotnet.Tools.Test.Tests } [Fact] - public void It_returns_NoOp_if_the_dotnet_test_state_is_not_VersionCheckCompleted() + public void It_returns_NoOp_if_the_dotnet_test_state_is_not_VersionCheckCompleted_or_InitialState() { var dotnetTestMock = new Mock(); dotnetTestMock.Setup(d => d.State).Returns(DotnetTestState.Terminated); @@ -91,7 +91,20 @@ namespace Microsoft.Dotnet.Tools.Test.Tests } [Fact] - public void It_returns_TestExecutionSentTestRunnerProcessStartInfo_when_it_handles_the_message() + public void It_returns_TestExecutionSentTestRunnerProcessStartInfo_when_it_handles_the_message_and_current_state_is_InitialState() + { + var dotnetTestMock = new Mock(); + dotnetTestMock.Setup(d => d.State).Returns(DotnetTestState.InitialState); + + var nextState = _testGetTestRunnerProcessStartInfoMessageHandler.HandleMessage( + dotnetTestMock.Object, + _validMessage); + + nextState.Should().Be(DotnetTestState.TestExecutionSentTestRunnerProcessStartInfo); + } + + [Fact] + public void It_returns_TestExecutionSentTestRunnerProcessStartInfo_when_it_handles_the_message_and_current_state_is_VersionCheckCompleted() { var nextState = _testGetTestRunnerProcessStartInfoMessageHandler.HandleMessage( _dotnetTestMock.Object,