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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using XFEEDToolBox.Core.Galaxy;
using XFEExtension.NetCore.XUnit.Attributes;

namespace XFEEDToolBox.Test;

[TestFixture]
public class GalaxyOriginalSizeTests
{
    private static GalacticSystem Star(int? colony=null)=>new("Measured",new(1,2,3),StarClass:"O")
    {Data=new(){Population=600,NativeFilterFacts=colony is {} status?new("F1",42,7,ColonisationStatus:status):null}};

    [Test] public void CurrentPanelDoesNotOfferAllSavedVisualisationIdentifiers()
    {
        Check.That(GalaxyOriginalSizeOptions.CurrentPanelCategories.SequenceEqual([GalaxyFilterCategory.None,GalaxyFilterCategory.Population]));
        for(var id=0;id<16;id++)
        {
            var category=GalaxyOriginalSettings.CategoryForIndex(id)!.Value;
            var option=GalaxyOriginalSizeOptions.ForCategory(category);Check.That(option is not null);
            Check.Equal(id is 0 or 1,option!.Value.CurrentPanelOption);
        }
        Check.That(GalaxyOriginalSizeOptions.ForCategory(GalaxyFilterCategory.Markers) is null);
        Check.That(GalaxyOriginalSizeOptions.ForCategory(GalaxyFilterCategory.PowerActivity) is null);
    }

    [Test] public void SavedClassifiedSizeChannelsUseTheActualConstantWithoutDependingOnCategoryFacts()
    {
        foreach(var id in new[]{2,3,4,5,6,7,8,10,11,12,14,15})
        {
            var category=GalaxyOriginalSettings.CategoryForIndex(id)!.Value;
            var imported=GalaxyOriginalSettings.Parse($"<Root><RealisticView Value='1'/><ColourVisIndex Value='1'/><SizeVisIndex Value='{id}'/></Root>",new());
            Check.Equal(category,imported.Filter.SizeCategory);
            Check.Equal(GalaxyOriginalAppearance.DefaultSize,imported.Filter.SelectedOriginalSize(Star())!.Value);
            Check.Equal(GalaxyOriginalAppearance.DefaultSize,imported.Filter.RelativeSize(Star() with{Data=new()}));
            Check.That(imported.Limitations.All(l=>!l.Contains("公式尚未核验")));
        }
    }

    [Test] public void ColonisationSizeUsesRawCandidateClassificationAndDoesNotGuessFromPublicLabels()
    {
        var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.None,SizeCategory=GalaxyFilterCategory.Colonisation};
        Check.That(filter.IsQueryActive&&filter.RequestsOriginalColonisationSize);
        for(var status=0;status<=15;status++)
            Check.Equal(GalaxyOriginalAppearance.DefaultSize*(status is 5 or 6?GalaxyOriginalSizeOptions.ColonisationExcludedMultiplier:1),filter.SelectedOriginalSize(Star(status))!.Value);
        Check.That(filter.SelectedOriginalSize(Star() with{Data=new(){Colonisation="excluded",OwnedColony=true}}) is null);
        Check.That(filter.SelectedOriginalSize(Star(16)) is null);
        Check.Equal(1f,(filter with{Mode=GalaxyMapMode.Realistic}).RelativeSize(Star(5)));
        Check.That(!(filter with{Mode=GalaxyMapMode.Realistic}).RequestsOriginalColonisationSize);
    }

    [Test] public void PopulationAndCommoditySizesRemainIndependentOfTheColourSelection()
    {
        var population=new GalaxyMapFilter{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.Security,SizeCategory=GalaxyFilterCategory.Population,PopulationMinimum=100,PopulationMaximum=1100};
        Check.That(Math.Abs(population.SelectedOriginalSize(Star())!.Value-1.15f)<.00001f);
        Check.Equal(0f,population.SelectedOriginalSize(Star() with{Data=new(){Population=99}})!.Value);
        Check.That(population.SelectedOriginalSize(Star() with{Data=new()}) is null);
        var commodity=population with{SizeCategory=GalaxyFilterCategory.Commodity};
        Check.That(commodity.RequiresOriginalCommodity&&commodity.SelectedOriginalSize(Star()) is null);
        Check.Equal(GalaxyOriginalAppearance.DefaultSize,commodity.RelativeSize(Star()));
    }
}