Files
WCTDataMiner/tests/Gpulse.WCT.DataAnalyzer.Tests/Commands/PlossParserTests.cs

77 lines
2.5 KiB
C#
Raw Normal View History

namespace Gpulse.WCT.DataAnalyzer.Tests.Commands;
/// <summary>
/// PlossParser 直接单测:覆盖 commit eba1d20 引入的 Field1 十六进制解析
/// 0x 前缀与无前缀两种写法),该路径此前在 legacy 删除后零覆盖。
/// </summary>
[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<Core.Application.Parsing.PlossParser>();
}
[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));
});
}
}