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.Galaxy;
using XFEExtension.NetCore.XUnit.Attributes;

namespace XFEEDToolBox.Test;

[TestFixture]
public sealed class GalaxyNativeBasicSystemFactsTests
{
    [Test] public void ReadyMissingRowProvenanceIsDistinctAndContradictoryDefaultsAreRejected()
    {
        const string body="\"population\":\"0\",\"governmentId\":1,\"primaryEconomyId\":1,\"secondaryEconomyId\":1,\"factionStateId\":0,\"allegianceId\":\"18446744073709551615\",\"securityValue\":0";
        var observed=GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body+"}"))!;
        Check.That(!observed.Defaulted&&observed.AllegianceKey is null);
        var fallback=GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body+",\"defaulted\":true}"))!;
        Check.That(fallback.Defaulted);Check.Equal("None",fallback.Government);Check.Equal("None",fallback.PrimaryEconomy);
        Check.Equal("None",fallback.AllegianceKey);Check.Equal("Anarchy",fallback.SecurityKey);
        Check.Throws<InvalidDataException>(()=>GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body+",\"defaulted\":1}")));
        Check.Throws<InvalidDataException>(()=>GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body.Replace("\"governmentId\":1","\"governmentId\":4")+",\"defaulted\":true}")));
        Check.Throws<InvalidDataException>(()=>GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body+",\"defaulted\":true,\"allegianceKey\":\"Empire\"}")));
        Check.Throws<InvalidDataException>(()=>GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body+",\"defaulted\":true,\"allegianceKey\":\"UnverifiedFuture\"}")));
    }
    [Test] public void OptionalAllegianceKeyUsesOnlyActualDefinitionNamesAndKeepsLegacyUnknown()
    {
        const string body="\"population\":\"0\",\"governmentId\":1,\"primaryEconomyId\":1,\"secondaryEconomyId\":1,\"factionStateId\":0,\"allegianceId\":\"9007199254740995\",\"securityValue\":0";
        var legacy=GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body+"}"))!;Check.That(legacy.AllegianceKey is null);
        var actual=GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body+",\"allegianceKey\":\"Federation\"}"))!;
        Check.Equal("Federation",actual.AllegianceKey);Check.Equal(9007199254740995UL,actual.AllegianceId);
        var future=GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body+",\"allegianceKey\":\"UnverifiedFutureKey\"}"))!;
        Check.That(future.AllegianceKey is null);Check.Equal(9007199254740995UL,future.AllegianceId);
        Check.Throws<InvalidDataException>(()=>GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{"+body+",\"allegianceKey\":1}")));
    }
    [Test] public void ActualEnumsRetainBothEconomiesAndDoNotGuessAllegianceFromItsIdentifier()
    {
        var fact=new GalaxyNativeBasicSystemFacts(123456789,4,4,6,17,9007199254740995,79);
        Check.Equal("Democracy",fact.Government);Check.Equal("Industrial",fact.PrimaryEconomy);Check.Equal("HighTech",fact.SecondaryEconomy);
        Check.Equal("CivilLiberty",fact.BaseFactionState);Check.Equal(123456789L,fact.PopulationForFilter);Check.Equal(3,fact.SecurityClass);
        Check.Equal(9007199254740995UL,fact.AllegianceId);
        Check.Equal("Agriculture",(fact with{PrimaryEconomyId=3}).PrimaryEconomy);
    }
    [Test] public void ExactU64AndUnknownFutureEnumsCannotTurnIntoNoDataOrOverflow()
    {
        using var json=JsonDocument.Parse("{\"population\":\"18446744073709551615\",\"governmentId\":4294967295,\"primaryEconomyId\":29,\"secondaryEconomyId\":28,\"factionStateId\":40,\"allegianceId\":\"9007199254740995\",\"securityValue\":255}");
        var fact=GalaxyNativeBasicSystemFacts.FromWire(json.RootElement)!;
        Check.Equal(ulong.MaxValue,fact.Population);Check.That(fact.PopulationForFilter is null&&fact.Government is null&&fact.PrimaryEconomy is null&&fact.BaseFactionState is null&&fact.SecurityClass is null);
        Check.Equal("Carrier",fact.SecondaryEconomy);Check.Equal(9007199254740995UL,fact.AllegianceId);
        Check.That(GalaxyNativeBasicSystemFacts.FromWire(Check.Json("null")) is null);
        Check.Throws<InvalidDataException>(()=>GalaxyNativeBasicSystemFacts.FromWire(Check.Json("{\"population\":1}")));
    }
    [Test] public void OriginalSecurityThresholdsAndZeroPopulationRemainExact()
    {
        var fact=new GalaxyNativeBasicSystemFacts(0,4,1,1,14,ulong.MaxValue,39);
        Check.Equal(0L,fact.PopulationForFilter);Check.That(fact.BaseFactionState is null);Check.Equal(2,fact.SecurityClass);
        Check.Equal(3,(fact with{SecurityValue=40}).SecurityClass);Check.Equal(3,(fact with{SecurityValue=79}).SecurityClass);
        Check.Equal(4,(fact with{SecurityValue=80}).SecurityClass);Check.Equal(0,(fact with{GovernmentId=1,SecurityValue=255}).SecurityClass);
        Check.Equal(0,(fact with{GovernmentId=2,SecurityValue=255}).SecurityClass);
    }
    [Test] public void OriginalSecurityConstructorKeysFollowNumericClassRatherThanPaletteOrder()
    {
        var fact=new GalaxyNativeBasicSystemFacts(0,4,1,1,0,0,0);
        Check.Equal("LowSecurity",fact.SecurityKey);
        Check.Equal("LowSecurity",(fact with{SecurityValue=39}).SecurityKey);
        Check.Equal("MediumSecurity",(fact with{SecurityValue=40}).SecurityKey);
        Check.Equal("MediumSecurity",(fact with{SecurityValue=79}).SecurityKey);
        Check.Equal("HighSecurity",(fact with{SecurityValue=80}).SecurityKey);
        Check.Equal("HighSecurity",(fact with{SecurityValue=255}).SecurityKey);
        Check.Equal("Anarchy",(fact with{GovernmentId=1,SecurityValue=255}).SecurityKey);
        Check.Equal("Anarchy",(fact with{GovernmentId=2,SecurityValue=255}).SecurityKey);
        Check.That((fact with{GovernmentId=19}).SecurityKey is null);
    }
}