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{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{"oldowner"},PowerStateValues=new HashSet{"exploited"}}; var partial=GalaxyOriginalSettings.Parse("",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("",partial).Filter; Check.Equal(0u,empty.TerritoryPowerMask);Check.Equal(0u,empty.TerritoryStateMask); var disabled=GalaxyOriginalSettings.Parse("",empty).Filter; Check.That(disabled.TerritoryPowerMask is null&&disabled.TerritoryStateMask is null); var invalid=GalaxyOriginalSettings.Parse("",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{"somepublicowner"},PowerStateValues=new HashSet{"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); } }