diff --git a/src/Agent/AutopilotMonitor.Agent.V2.Core.Tests/Monitoring/Ime/CmTraceLogParserTests.cs b/src/Agent/AutopilotMonitor.Agent.V2.Core.Tests/Monitoring/Ime/CmTraceLogParserTests.cs index edbc885b..5af372fb 100644 --- a/src/Agent/AutopilotMonitor.Agent.V2.Core.Tests/Monitoring/Ime/CmTraceLogParserTests.cs +++ b/src/Agent/AutopilotMonitor.Agent.V2.Core.Tests/Monitoring/Ime/CmTraceLogParserTests.cs @@ -26,8 +26,7 @@ namespace AutopilotMonitor.Agent.V2.Core.Tests.Monitoring.Ime [InlineData("")] // empty [InlineData(" ")] // whitespace only [InlineData("")] // leading BOM breaks the StartsWith gate - [InlineData("garbage prefix ")] // leading junk + [InlineData("garbage prefix ")] // leading junk (non-ignorable) fails the StartsWith gate public void TryParseLine_returns_false_without_throwing_for_malformed_input(string line) { var ok = CmTraceLogParser.TryParseLine(line, out var entry); @@ -36,6 +35,24 @@ namespace AutopilotMonitor.Agent.V2.Core.Tests.Monitoring.Ime Assert.Null(entry); } + // ── Leading BOM → still parses (BOM-tolerant) ──────────────────────── + + [Fact] + public void TryParseLine_parses_bom_prefixed_line() + { + // A U+FEFF BOM can prefix the first line of a freshly-opened log. It does NOT break + // parsing: string.StartsWith (culture-sensitive) treats U+FEFF as an ignorable + // character so the gate passes, and the unanchored regex matches the "