using ClaudeDo.Worker.Runner; namespace ClaudeDo.Worker.Tests.Runner; public sealed class MessageParserTests { [Fact] public void WellFormed_Result_Line_Extracts_Result() { var line = """{"type":"result","result":"Hello **world**"}"""; Assert.True(MessageParser.TryExtractResult(line, out var result)); Assert.Equal("Hello **world**", result); } [Fact] public void Non_Result_Type_Returns_False() { var line = """{"type":"assistant","message":"hi"}"""; Assert.False(MessageParser.TryExtractResult(line, out var result)); Assert.Null(result); } [Fact] public void Missing_Type_Property_Returns_False() { var line = """{"result":"data"}"""; Assert.False(MessageParser.TryExtractResult(line, out var result)); Assert.Null(result); } [Fact] public void Malformed_Json_Returns_False_No_Throw() { var line = "this is not json {{{"; Assert.False(MessageParser.TryExtractResult(line, out var result)); Assert.Null(result); } [Fact] public void Empty_Line_Returns_False() { Assert.False(MessageParser.TryExtractResult("", out _)); Assert.False(MessageParser.TryExtractResult(" ", out _)); } [Fact] public void Null_Result_Value_Returns_True_With_Null() { var line = """{"type":"result","result":null}"""; Assert.True(MessageParser.TryExtractResult(line, out var result)); Assert.Null(result); } }