using XFEEDToolBox.Core.Galaxy;
using XFEExtension.NetCore.XUnit.Attributes;
namespace XFEEDToolBox.Test;
[TestFixture]
public class GalaxyOriginalPowerFiltersTests
{
[Test] public void OriginalExpansionAndStrongholdTogglesEachControlTwoDistinctNativeStages()
{
var withoutExpansion=GalaxyOriginalPowerFilters.SetStateGroup(null,"expansion",false);Check.Equal(249u,withoutExpansion);
Check.Equal(false,GalaxyOriginalPowerFilters.MatchesState(withoutExpansion,1));Check.Equal(false,GalaxyOriginalPowerFilters.MatchesState(withoutExpansion,2));Check.Equal(true,GalaxyOriginalPowerFilters.MatchesState(withoutExpansion,0));
Check.That(GalaxyOriginalPowerFilters.SetStateGroup(withoutExpansion,"expansion",true) is null);
Check.That(GalaxyOriginalPowerFilters.StateSelected(2,"expansion") is null);Check.Equal("stronghold",GalaxyOriginalPowerFilters.StateKeyForIndex(6));Check.Equal("stronghold",GalaxyOriginalPowerFilters.StateKeyForIndex(7));
Check.That(GalaxyOriginalPowerFilters.StateKeyForIndex(8) is null);Check.Equal(0u,GalaxyOriginalPowerFilters.FromSavedMask(0));Check.That(GalaxyOriginalPowerFilters.FromSavedMask(-1) is null);
}
[Test] public void OriginalPowerMaskUsesTheActualIndexAndLeavesFlaglessUnoccupiedSystemsVisible()
{
Check.Equal(true,GalaxyOriginalPowerFilters.MatchesPower(0,0,null,0));Check.Equal(false,GalaxyOriginalPowerFilters.MatchesPower(0,0,null,4));
Check.Equal(true,GalaxyOriginalPowerFilters.MatchesPower(4,0,null,12));Check.Equal(false,GalaxyOriginalPowerFilters.MatchesPower(2,0,null,12));
Check.Equal(true,GalaxyOriginalPowerFilters.MatchesPower(4,2,2,null));Check.Equal(false,GalaxyOriginalPowerFilters.MatchesPower(4,2,9,null));
Check.Equal(true,GalaxyOriginalPowerFilters.MatchesPower(4,2,34,null));Check.Equal(false,GalaxyOriginalPowerFilters.MatchesPower(2,2,34,null));
Check.That(GalaxyOriginalPowerFilters.MatchesPower(4,2,null,null) is null);Check.That(GalaxyOriginalPowerFilters.MatchesState(0,null) is null);Check.Equal(true,GalaxyOriginalPowerFilters.MatchesState(null,null));
}
[Test] public void OriginalTerritoryRequiresCurrentNativeAdmissibilityAndNeverLetsPublicProofBypassMasks()
{
var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Powerplay,Category=GalaxyFilterCategory.Power,TerritoryPowerMask=4,TerritoryStateMask=6};
GalacticSystem Actual(GalaxyNativePowerStatus? status)=>new("Actual",new(0,0,0)){Data=new(){Power="Unrelated public owner",ConfirmedQueries=new HashSet<string>{filter.QueryKey},NativeFilterFacts=new("F1",42,100){PowerStatus=status}}};
var expansion=Actual(new(0,1,null,null,4,0,true));Check.That(filter.Matches(expansion)&&filter.Evaluate(expansion).Matches&&!filter.IsUnknown(expansion));
Check.That(filter.Matches(Actual(new(0,2,null,null,12,1,true))));
Check.That(!filter.Matches(Actual(new(0,3,null,null,4,3,true))));Check.That(!(filter with{IncludeUnknown=true}).Matches(Actual(new(1,1,9,7,0,0,true))));
Check.That(!(filter with{IncludeUnknown=true}).Matches(Actual(new(0,1,null,null,4,0,false))));
var unknown=Actual(new(0,1,null,null,4,0,null));Check.That(!filter.Matches(unknown)&&filter.IsUnknown(unknown));Check.That((filter with{IncludeUnknown=true}).Matches(unknown));
Check.That(!filter.Matches(Actual(null)));Check.That((filter with{TerritoryPowerMask=0}).Matches(Actual(new(0,1,null,null,0,0,true))));
Check.That(!(filter with{TerritoryStateMask=0,IncludeUnknown=true}).Matches(expansion));
Check.That(filter.QueryKey!=(filter with{TerritoryPowerMask=8}).QueryKey&&filter.QueryKey!=(filter with{TerritoryStateMask=192}).QueryKey);
var outer=filter with{PowerplayView=GalaxyPowerplayView.Activities,TerritoryStateMask=0};
var visible=expansion with{Data=expansion.Data with{NativeFilterFacts=expansion.Data.NativeFilterFacts! with{PowerOuter=new(true,null,null,null)}}};
Check.That(outer.UsesPowerStatus&&outer.Matches(visible));
}
[Test] public void SavedMasksPreserveDisabledEmptyAndPartialOriginalGroupsWithoutPublicNameSelections()
{
var current=new GalaxyMapFilter{Values=new HashSet<string>{"oldowner"},PowerStateValues=new HashSet<string>{"exploited"}};
var partial=GalaxyOriginalSettings.Parse("<Root><RealisticView Value='2'/><PoliticsTerritoryModePowersFilter Value='4'/><PoliticsTerritoryModeStatesFilter Value='2'/></Root>",current).Filter;
Check.Equal(4u,partial.TerritoryPowerMask);Check.Equal(2u,partial.TerritoryStateMask);Check.That(partial.Values is null&&partial.PowerStateValues is null);Check.That(GalaxyOriginalPowerFilters.StateSelected(partial.TerritoryStateMask,"expansion") is null);
var empty=GalaxyOriginalSettings.Parse("<Root><PoliticsTerritoryModePowersFilter Value='0'/><PoliticsTerritoryModeStatesFilter Value='0'/></Root>",partial).Filter;
Check.Equal(0u,empty.TerritoryPowerMask);Check.Equal(0u,empty.TerritoryStateMask);
var disabled=GalaxyOriginalSettings.Parse("<Root><PoliticsTerritoryModePowersFilter Value='-1'/><PoliticsTerritoryModeStatesFilter Value='-1'/></Root>",empty).Filter;
Check.That(disabled.TerritoryPowerMask is null&&disabled.TerritoryStateMask is null);
var invalid=GalaxyOriginalSettings.Parse("<Root><PoliticsTerritoryModePowersFilter Value='not-a-number'/></Root>",partial);Check.Equal(4u,invalid.Filter.TerritoryPowerMask);Check.That(invalid.Limitations.Any(l=>l.Contains("格式无效")));
}
[Test] public async Task OriginalUnoccupiedMaskCandidatesAreNotIncorrectlyRestrictedToPublicControllingPower()
{
using var http=new HttpClient();var service=new GalaxyQueryService(http);
var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Powerplay,Category=GalaxyFilterCategory.Power,TerritoryPowerMask=4,TerritoryStateMask=6,Values=new HashSet<string>{"somepublicowner"},PowerStateValues=new HashSet<string>{"expansion"}};
var plans=await service.PlansAsync(filter);Check.Equal(1,plans.Count);Check.Equal("systems",plans[0].Index);Check.Equal(0,plans[0].Filters.Count);Check.That(!plans[0].CertifiesMatch);
}
}
using XFEEDToolBox.Core.Galaxy;
using XFEExtension.NetCore.XUnit.Attributes;
namespace XFEEDToolBox.Test;
[TestFixture]
public class GalaxyOriginalPowerFiltersTests
{
[Test] public void OriginalExpansionAndStrongholdTogglesEachControlTwoDistinctNativeStages()
{
var withoutExpansion=GalaxyOriginalPowerFilters.SetStateGroup(null,"expansion",false);Check.Equal(249u,withoutExpansion);
Check.Equal(false,GalaxyOriginalPowerFilters.MatchesState(withoutExpansion,1));Check.Equal(false,GalaxyOriginalPowerFilters.MatchesState(withoutExpansion,2));Check.Equal(true,GalaxyOriginalPowerFilters.MatchesState(withoutExpansion,0));
Check.That(GalaxyOriginalPowerFilters.SetStateGroup(withoutExpansion,"expansion",true) is null);
Check.That(GalaxyOriginalPowerFilters.StateSelected(2,"expansion") is null);Check.Equal("stronghold",GalaxyOriginalPowerFilters.StateKeyForIndex(6));Check.Equal("stronghold",GalaxyOriginalPowerFilters.StateKeyForIndex(7));
Check.That(GalaxyOriginalPowerFilters.StateKeyForIndex(8) is null);Check.Equal(0u,GalaxyOriginalPowerFilters.FromSavedMask(0));Check.That(GalaxyOriginalPowerFilters.FromSavedMask(-1) is null);
}
[Test] public void OriginalPowerMaskUsesTheActualIndexAndLeavesFlaglessUnoccupiedSystemsVisible()
{
Check.Equal(true,GalaxyOriginalPowerFilters.MatchesPower(0,0,null,0));Check.Equal(false,GalaxyOriginalPowerFilters.MatchesPower(0,0,null,4));
Check.Equal(true,GalaxyOriginalPowerFilters.MatchesPower(4,0,null,12));Check.Equal(false,GalaxyOriginalPowerFilters.MatchesPower(2,0,null,12));
Check.Equal(true,GalaxyOriginalPowerFilters.MatchesPower(4,2,2,null));Check.Equal(false,GalaxyOriginalPowerFilters.MatchesPower(4,2,9,null));
Check.Equal(true,GalaxyOriginalPowerFilters.MatchesPower(4,2,34,null));Check.Equal(false,GalaxyOriginalPowerFilters.MatchesPower(2,2,34,null));
Check.That(GalaxyOriginalPowerFilters.MatchesPower(4,2,null,null) is null);Check.That(GalaxyOriginalPowerFilters.MatchesState(0,null) is null);Check.Equal(true,GalaxyOriginalPowerFilters.MatchesState(null,null));
}
[Test] public void OriginalTerritoryRequiresCurrentNativeAdmissibilityAndNeverLetsPublicProofBypassMasks()
{
var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Powerplay,Category=GalaxyFilterCategory.Power,TerritoryPowerMask=4,TerritoryStateMask=6};
GalacticSystem Actual(GalaxyNativePowerStatus? status)=>new("Actual",new(0,0,0)){Data=new(){Power="Unrelated public owner",ConfirmedQueries=new HashSet<string>{filter.QueryKey},NativeFilterFacts=new("F1",42,100){PowerStatus=status}}};
var expansion=Actual(new(0,1,null,null,4,0,true));Check.That(filter.Matches(expansion)&&filter.Evaluate(expansion).Matches&&!filter.IsUnknown(expansion));
Check.That(filter.Matches(Actual(new(0,2,null,null,12,1,true))));
Check.That(!filter.Matches(Actual(new(0,3,null,null,4,3,true))));Check.That(!(filter with{IncludeUnknown=true}).Matches(Actual(new(1,1,9,7,0,0,true))));
Check.That(!(filter with{IncludeUnknown=true}).Matches(Actual(new(0,1,null,null,4,0,false))));
var unknown=Actual(new(0,1,null,null,4,0,null));Check.That(!filter.Matches(unknown)&&filter.IsUnknown(unknown));Check.That((filter with{IncludeUnknown=true}).Matches(unknown));
Check.That(!filter.Matches(Actual(null)));Check.That((filter with{TerritoryPowerMask=0}).Matches(Actual(new(0,1,null,null,0,0,true))));
Check.That(!(filter with{TerritoryStateMask=0,IncludeUnknown=true}).Matches(expansion));
Check.That(filter.QueryKey!=(filter with{TerritoryPowerMask=8}).QueryKey&&filter.QueryKey!=(filter with{TerritoryStateMask=192}).QueryKey);
var outer=filter with{PowerplayView=GalaxyPowerplayView.Activities,TerritoryStateMask=0};
var visible=expansion with{Data=expansion.Data with{NativeFilterFacts=expansion.Data.NativeFilterFacts! with{PowerOuter=new(true,null,null,null)}}};
Check.That(outer.UsesPowerStatus&&outer.Matches(visible));
}
[Test] public void SavedMasksPreserveDisabledEmptyAndPartialOriginalGroupsWithoutPublicNameSelections()
{
var current=new GalaxyMapFilter{Values=new HashSet<string>{"oldowner"},PowerStateValues=new HashSet<string>{"exploited"}};
var partial=GalaxyOriginalSettings.Parse("<Root><RealisticView Value='2'/><PoliticsTerritoryModePowersFilter Value='4'/><PoliticsTerritoryModeStatesFilter Value='2'/></Root>",current).Filter;
Check.Equal(4u,partial.TerritoryPowerMask);Check.Equal(2u,partial.TerritoryStateMask);Check.That(partial.Values is null&&partial.PowerStateValues is null);Check.That(GalaxyOriginalPowerFilters.StateSelected(partial.TerritoryStateMask,"expansion") is null);
var empty=GalaxyOriginalSettings.Parse("<Root><PoliticsTerritoryModePowersFilter Value='0'/><PoliticsTerritoryModeStatesFilter Value='0'/></Root>",partial).Filter;
Check.Equal(0u,empty.TerritoryPowerMask);Check.Equal(0u,empty.TerritoryStateMask);
var disabled=GalaxyOriginalSettings.Parse("<Root><PoliticsTerritoryModePowersFilter Value='-1'/><PoliticsTerritoryModeStatesFilter Value='-1'/></Root>",empty).Filter;
Check.That(disabled.TerritoryPowerMask is null&&disabled.TerritoryStateMask is null);
var invalid=GalaxyOriginalSettings.Parse("<Root><PoliticsTerritoryModePowersFilter Value='not-a-number'/></Root>",partial);Check.Equal(4u,invalid.Filter.TerritoryPowerMask);Check.That(invalid.Limitations.Any(l=>l.Contains("格式无效")));
}
[Test] public async Task OriginalUnoccupiedMaskCandidatesAreNotIncorrectlyRestrictedToPublicControllingPower()
{
using var http=new HttpClient();var service=new GalaxyQueryService(http);
var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Powerplay,Category=GalaxyFilterCategory.Power,TerritoryPowerMask=4,TerritoryStateMask=6,Values=new HashSet<string>{"somepublicowner"},PowerStateValues=new HashSet<string>{"expansion"}};
var plans=await service.PlansAsync(filter);Check.Equal(1,plans.Count);Check.Equal("systems",plans[0].Index);Check.Equal(0,plans[0].Filters.Count);Check.That(!plans[0].CertifiesMatch);
}
}