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 GalaxyOriginalTradeCategoriesTests
{
    [Test] public void CachedOriginalLeavesUseTheOriginalThirteenParentsWithoutAddingUnobservedRoutes()
    {
        Check.Equal(13,GalaxyOriginalTradeCategories.Categories.Count);Check.Equal(123,GalaxyOriginalTradeCategories.Commodities.Count);
        var choices=new[]{new GalaxyFilterChoice("gold","Gold"),new GalaxyFilterChoice("imperialslaves","Imperial Slaves"),new GalaxyFilterChoice("lowtemperaturediamonds","Low Temperature Diamonds")};
        var groups=GalaxyOriginalTradeCategories.Build(choices);Check.Equal(3,groups.Sum(g=>g.Children.Count));
        Check.That(groups.Single(g=>g.Key=="originaltrade:0").Children.Single().Key=="gold");
        // The original TradeRoute table puts ImperialSlaves in Other, whereas
        // the current market taxonomy has an independent slaves category.
        Check.That(groups.Single(g=>g.Key=="originaltrade:12").Children.Single().Key=="imperialslaves");
        var unknown=groups.Single(g=>!g.OriginalCategory);Check.That(unknown.Children.Single().Key=="lowtemperaturediamonds");
        Check.Equal(0,GalaxyOriginalTradeCategories.Build([]).Count);
    }
    [Test] public void SavedTraderSourceDoesNotSelectAnUnrelatedCommodityParentOrActivateHistoricalTrade()
    {
        Check.Equal(GalaxyTradeFlowSource.Npc,GalaxyOriginalTradeCategories.FromSavedTraderCategory(1));Check.Equal(GalaxyTradeFlowSource.Players,GalaxyOriginalTradeCategories.FromSavedTraderCategory(2));Check.Equal(GalaxyTradeFlowSource.All,GalaxyOriginalTradeCategories.FromSavedTraderCategory(3));
        Check.That(GalaxyOriginalTradeCategories.FromSavedTraderCategory(0) is null&&GalaxyOriginalTradeCategories.FromSavedTraderCategory(13) is null);
        var imported=GalaxyOriginalSettings.Parse("<Root><TradeCategory Value='3'/><TradeRoutes Value='1'/></Root>",new(){HistoricalTradeSource=GalaxyTradeFlowSource.Players});
        Check.Equal(GalaxyTradeFlowSource.All,imported.Filter.HistoricalTradeSource);Check.Equal(GalaxyTradeFlowSource.All,imported.Filter.CurrentTradeSource);Check.That(imported.Filter.ShowCurrentTradeFlows&&!imported.Filter.ShowHistoricalTradeFlows);Check.Equal("1",imported.OriginalOptions["TradeRoutes"]);
        var invalid=GalaxyOriginalSettings.Parse("<Root><TradeCategory Value='0'/></Root>",new(){HistoricalTradeSource=GalaxyTradeFlowSource.Players});Check.Equal(GalaxyTradeFlowSource.Players,invalid.Filter.HistoricalTradeSource);Check.That(invalid.Limitations.Any(l=>l.Contains("交易者来源编号")));
    }
    [Test] public void SavedParentVisibilityAndLeafSelectionRemainIndependentAndAndTogether()
    {
        var imported=GalaxyOriginalSettings.Parse("<Root><TradeRoutes Value='1'/><VisibilityFlags><categories><Metals Value='0'/></categories><commodities><Gold Value='1'/><Silver Value='0'/></commodities></VisibilityFlags></Root>",new());
        Check.That(imported.Filter.CurrentTradeCategories is {} categories&&!categories.Contains(0)&&categories.Count==12);
        Check.That(imported.Filter.CurrentTradeCommodities is {} commodities&&commodities.Contains("gold")&&!commodities.Contains("silver")&&commodities.Contains("copper"));
        Check.Equal("0",imported.OriginalOptions["VisibilityFlags/categories/Metals"]);
        var snapshot=new GalaxyCurrentTradeFlowsSnapshot(true,1000,100,50,1,[new(42,43,1,"Gold",.5f,0,1000),new(42,43,2,"Silver",.4f,0,1000)],0);
        Check.Equal(0,GalaxyCurrentTradeRoutes.Select(snapshot,GalaxyTradeFlowSource.Npc,imported.Filter.CurrentTradeCommodities,imported.Filter.CurrentTradeCategories).Count);
        // Re-enabling the parent must recover Gold while Silver stays off.
        var restored=GalaxyCurrentTradeRoutes.Select(snapshot,GalaxyTradeFlowSource.Npc,imported.Filter.CurrentTradeCommodities,new HashSet<int>{0});
        Check.Equal(1,restored.Count);Check.Equal(.5f,restored[0].Amount);Check.Equal("Gold",restored[0].Contributions.Single().CommodityName);
        Check.That(!imported.Filter.ShowHistoricalTradeFlows);
    }
    [Test] public void AbsentOriginalTradeEntriesDefaultOnAndUnknownFlagsRemainRaw()
    {
        var imported=GalaxyOriginalSettings.Parse("<Root><VisibilityFlags><categories><FutureParent Value='0'/></categories><commodities><FutureCommodity Value='1'/></commodities></VisibilityFlags></Root>",new());
        Check.Equal(13,imported.Filter.CurrentTradeCategories!.Count);Check.Equal(123,imported.Filter.CurrentTradeCommodities!.Count);
        Check.Equal("0",imported.OriginalOptions["VisibilityFlags/categories/FutureParent"]);Check.Equal("1",imported.OriginalOptions["VisibilityFlags/commodities/FutureCommodity"]);
        Check.Equal(2,imported.Limitations.Count);Check.That(!imported.Filter.CurrentTradeCommodities.Contains("futurecommodity"));
        var empty=GalaxyOriginalSettings.Parse("<Root><VisibilityFlags><categories/><commodities/></VisibilityFlags></Root>",new(){CurrentTradeCategories=new HashSet<int>(),CurrentTradeCommodities=new HashSet<string>()});
        Check.Equal(13,empty.Filter.CurrentTradeCategories!.Count);Check.Equal(123,empty.Filter.CurrentTradeCommodities!.Count);
    }
}