using GeoVLog.Core.Parsers; using System; using Xunit; namespace GeoVLog.Tests.Parsers; public class RadarAltParserTests { [Fact] [Trait("Category", "Core")] public void ParsesValidFrame() { byte[] msg = { 0x10, 0xDF, 0x03, 0x03, 0xE8, 0x00, 0x33, 0x10, 0x03 }; var ts = new DateTime(2025, 1, 1, 0, 0, 0, DateTimeKind.Utc); bool ok = RadarAltParser.TryParse(msg, ts, out var parsed); Assert.True(ok); Assert.Equal(ts, parsed.TimestampUtc); Assert.Equal(1000, parsed.AltitudeFt!.Value); Assert.Equal((byte)0x00, parsed.StatusByte!.Value); } [Fact] [Trait("Category", "Core")] public void RejectsInvalidChecksum() { byte[] msg = { 0x10, 0xDF, 0x03, 0x03, 0xE8, 0x00, 0x00, 0x10, 0x03 }; Assert.False(RadarAltParser.TryParse(msg, DateTime.UtcNow, out _)); } [Fact] [Trait("Category", "Core")] public void HandlesDleStuffing() { // altitude 0x0110 ft with LSB 0x10 stuffed byte[] msg = { 0x10, 0xDF, 0x03, 0x01, 0x10, 0x10, 0x00, 0x0D, 0x10, 0x03 }; bool ok = RadarAltParser.TryParse(msg, DateTime.UtcNow, out var parsed); Assert.True(ok); Assert.Equal(0x0110, parsed.AltitudeFt!.Value); } }