private void CommandLoop() { bool keepRunning = true; var socketReader = new SocketReader(_clientSocket, new BinarySerializationProtocol()); while (keepRunning) { var command = socketReader.GetNextMessage <CommandMessage>(); switch (command.CommandName) { case "CreateRunner": var package = (TestPackage)command.Arguments[0]; _runner = CreateRunner(package); break; case "Load": SendResult(_runner.Load()); break; case "Reload": SendResult(_runner.Reload()); break; case "Unload": _runner.Unload(); break; case "Explore": var filter = (TestFilter)command.Arguments[0]; SendResult(_runner.Explore(filter)); break; case "CountTestCases": filter = (TestFilter)command.Arguments[0]; SendResult(_runner.CountTestCases(filter)); break; case "Run": filter = (TestFilter)command.Arguments[0]; SendResult(_runner.Run(this, filter)); break; case "RunAsync": filter = (TestFilter)command.Arguments[0]; _runner.RunAsync(this, filter); break; case "Stop": keepRunning = false; break; } } Stop(); }
// Return the result of a test run as a TestEngineResult. ProgressMessages // preceding the final CommandReturnMessage are handled as well. private TestEngineResult TestRunResult(ITestEventListener listener) { var rdr = new SocketReader(_socket, _wireProtocol); while (true) { var receivedMessage = rdr.GetNextMessage(); var receivedType = receivedMessage.GetType(); var returnMessage = receivedMessage as CommandReturnMessage; if (returnMessage != null) { return((TestEngineResult)returnMessage.ReturnValue); } var progressMessage = receivedMessage as ProgressMessage; if (progressMessage == null) { throw new InvalidOperationException($"Expected either a ProgressMessage or a CommandReturnMessage but received a {receivedType}"); } listener.OnTestEvent(progressMessage.Report); } }