XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Text.Json;
using XFEEDToolBox.Core.Models;
using XFEEDToolBox.Core.Presentation;
using XFEExtension.NetCore.XUnit.Attributes;
namespace XFEEDToolBox.Test;
[TestFixture]
public class ShipStatusTests
{
    [Test] public void InternalHeatMustNotMasqueradeAsTheUnverifiedHudPercentage()
    {
        using var raw=JsonDocument.Parse("""{"heatPercent":94.5,"heatHudPercent":63,"heatNormalizationVerified":false}""");
        var rows=ShipStatusRows.Flight(raw.RootElement);
        Check.Equal("待核对",rows.Single(r=>r.Key=="heat").Value);
        Check.Equal("94.50%",rows.Single(r=>r.Key=="heatRaw").Value);
        Check.Equal("—",rows.Single(r=>r.Key=="scoop").Value);
        using var verified=JsonDocument.Parse("""{"heatPercent":94.5,"heatHudPercent":63,"heatNormalizationVerified":true}""");
        Check.Equal("63.0%",ShipStatusRows.Flight(verified.RootElement).Single(r=>r.Key=="heat").Value);
    }
    [Test] public void AmmunitionRetainsSnapshotProvenanceAndUnknownShieldStaysUnknown()
    {
        var at=DateTimeOffset.Parse("2026-10-22T01:00:00Z");
        var p=new PlayerState{CurrentShipId=7,Ships=[new(){ShipId=7,ConfigurationAt=at,Modules=[new(){Slot="HugeHardpoint1",Item="hpt_multicannon_gimbal_huge",AmmoInClip=90,AmmoInHopper=1800}]}]};
        var ammo=ShipStatusRows.Ammunition(p).Single();Check.Equal("90",ammo.Clip);Check.Equal("1800",ammo.Reserve);
        Check.That(ammo.Source.Contains("快照")&&ammo.Source.Contains(ShipStatusRows.At(at)));
        Check.Equal("—",ShipStatusRows.Cockpit(p).Single(r=>r.Key=="shield").Value);
    }
    [Test] public void NativeReadingsUpdateSurvivingRowsWithoutResettingThePanel()
    {
        var rows=new LiveCollection<ShipStatusLiveRow,ShipStatusValue,string>(x=>x.Key,x=>new(x));
        using var first=JsonDocument.Parse("""{"heatPercent":90}""");using var next=JsonDocument.Parse("""{"heatPercent":91}""");
        rows.Apply(ShipStatusRows.Flight(first.RootElement));var row=rows.Single(r=>r.Record.Key=="heatRaw");var changes=0;
        rows.CollectionChanged+=(_,_)=>changes++;
        rows.Apply(ShipStatusRows.Flight(next.RootElement));
        Check.That(ReferenceEquals(row,rows.Single(r=>r.Record.Key=="heatRaw"))&&changes==0);
        Check.Equal("91.00%",row.Value);
    }
}