namespace Gpulse.WCT.DataAnalyzer.Tests.Commands; /// /// PlossParser 直接单测:覆盖 commit eba1d20 引入的 Field1 十六进制解析 /// (0x 前缀与无前缀两种写法),该路径此前在 legacy 删除后零覆盖。 /// [TestFixture] public class PlossParserTests : CommandTestBase { private Core.Application.Parsing.PlossParser _parser = default!; // NUnit 会先运行基类的 [SetUp](创建 Host),再运行本方法 [SetUp] public async Task InitParser() { await Task.CompletedTask; _parser = Host.Services.GetRequiredService(); } [Test] public void Parse_HexField1_WithZeroPrefix_DecodesCorrectly() { // Field1 = "0C" → 十进制 12 var dir = NewDir(); var path = TestFixtures.WritePlossLog(dir, "hex-0C.dat", new TestFixtures.PlossTwoLineRow(Field1AsHex: "0C")); var lines = File.ReadAllLines(path); var result = _parser.ParseMultiLine(lines, Guid.Empty); Assert.Multiple(() => { Assert.That(result, Is.Not.Null); Assert.That(result!.IsSuccess, Is.True); Assert.That(result.Record!.Field1, Is.EqualTo(12)); }); } [Test] public void Parse_HexField1_WithZeroXPrefix_DecodesCorrectly() { // Field1 = "0xFF" → 十进制 255 var dir = NewDir(); var path = TestFixtures.WritePlossLog(dir, "hex-0xFF.dat", new TestFixtures.PlossTwoLineRow(Field1AsHex: "0xFF")); var lines = File.ReadAllLines(path); var result = _parser.ParseMultiLine(lines, Guid.Empty); Assert.Multiple(() => { Assert.That(result, Is.Not.Null); Assert.That(result!.IsSuccess, Is.True); Assert.That(result.Record!.Field1, Is.EqualTo(255)); }); } [Test] public void Parse_DecimalField1_DecodesCorrectly() { // Field1 普通十进制 → 原值 var dir = NewDir(); var path = TestFixtures.WritePlossLog(dir, "dec-42.dat", new TestFixtures.PlossTwoLineRow(Field1: 42)); var lines = File.ReadAllLines(path); var result = _parser.ParseMultiLine(lines, Guid.Empty); Assert.Multiple(() => { Assert.That(result, Is.Not.Null); Assert.That(result!.IsSuccess, Is.True); Assert.That(result.Record!.Field1, Is.EqualTo(42)); }); } }