阶段 S3 - 收口出战合法性
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using GeometryTD.Definition;
|
||||
using GeometryTD.Procedure;
|
||||
using GeometryTD.UI;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace GeometryTD.Tests.EditMode
|
||||
@@ -170,6 +171,171 @@ namespace GeometryTD.Tests.EditMode
|
||||
Assert.That(pendingResult, Is.EqualTo(ProcedureMainRunCompletionResult.NoChange));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ValidateCombatEntry_Returns_InventoryUnavailable_When_Inventory_Is_Null()
|
||||
{
|
||||
ProcedureMainCombatEntryValidationResult result =
|
||||
ProcedureMainCombatEntryValidationService.Validate(null);
|
||||
|
||||
Assert.That(result.CanEnterCombat, Is.False);
|
||||
Assert.That(result.BlockReason, Is.EqualTo(ProcedureMainCombatEntryBlockReason.InventoryUnavailable));
|
||||
Assert.That(result.ValidationSummary, Is.Not.Null);
|
||||
Assert.That(result.ValidationSummary.HasAnyValidParticipantTower, Is.False);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ValidateCombatEntry_Returns_NoValidParticipantTower_When_ParticipantArea_Is_Empty()
|
||||
{
|
||||
BackpackInventoryData inventory = CreateCombatInventory();
|
||||
inventory.ParticipantTowerInstanceIds.Clear();
|
||||
|
||||
ProcedureMainCombatEntryValidationResult result =
|
||||
ProcedureMainCombatEntryValidationService.Validate(inventory);
|
||||
|
||||
Assert.That(result.CanEnterCombat, Is.False);
|
||||
Assert.That(result.BlockReason, Is.EqualTo(ProcedureMainCombatEntryBlockReason.NoValidParticipantTower));
|
||||
Assert.That(result.ValidationSummary.HasAnyValidParticipantTower, Is.False);
|
||||
Assert.That(result.ValidationSummary.ValidTowers.Count, Is.EqualTo(0));
|
||||
Assert.That(result.ValidationSummary.InvalidResults.Count, Is.EqualTo(0));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ValidateCombatEntry_Returns_NoValidParticipantTower_When_AllParticipantTowers_Are_Invalid()
|
||||
{
|
||||
BackpackInventoryData inventory = CreateCombatInventory();
|
||||
inventory.Towers[0].BaseComponentInstanceId = 99903;
|
||||
|
||||
ProcedureMainCombatEntryValidationResult result =
|
||||
ProcedureMainCombatEntryValidationService.Validate(inventory);
|
||||
|
||||
Assert.That(result.CanEnterCombat, Is.False);
|
||||
Assert.That(result.BlockReason, Is.EqualTo(ProcedureMainCombatEntryBlockReason.NoValidParticipantTower));
|
||||
Assert.That(result.ValidationSummary.ValidTowers.Count, Is.EqualTo(0));
|
||||
Assert.That(result.ValidationSummary.InvalidResults.Count, Is.EqualTo(1));
|
||||
Assert.That(
|
||||
result.ValidationSummary.InvalidResults[0].FailureReason,
|
||||
Is.EqualTo(CombatParticipantTowerValidationFailureReason.MissingBaseComponent));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ValidateCombatEntry_Returns_CanEnter_When_At_Least_One_ParticipantTower_Is_Valid()
|
||||
{
|
||||
BackpackInventoryData inventory = CreateCombatInventory();
|
||||
inventory.Towers.Add(new TowerItemData
|
||||
{
|
||||
InstanceId = 90002,
|
||||
Name = "非法塔",
|
||||
MuzzleComponentInstanceId = 10001,
|
||||
BearingComponentInstanceId = 20001,
|
||||
BaseComponentInstanceId = 99903
|
||||
});
|
||||
inventory.ParticipantTowerInstanceIds.Add(90002);
|
||||
|
||||
ProcedureMainCombatEntryValidationResult result =
|
||||
ProcedureMainCombatEntryValidationService.Validate(inventory);
|
||||
|
||||
Assert.That(result.CanEnterCombat, Is.True);
|
||||
Assert.That(result.BlockReason, Is.EqualTo(ProcedureMainCombatEntryBlockReason.None));
|
||||
Assert.That(result.ValidationSummary.ValidTowers.Count, Is.EqualTo(1));
|
||||
Assert.That(result.ValidationSummary.ValidTowers[0].InstanceId, Is.EqualTo(90001));
|
||||
Assert.That(result.ValidationSummary.InvalidResults.Count, Is.EqualTo(1));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void BuildInvalidParticipantTowerLog_Returns_None_When_InvalidResults_Are_Empty()
|
||||
{
|
||||
string log = ProcedureMainCombatEntryValidationService.BuildInvalidParticipantTowerLog(
|
||||
new CombatParticipantTowerValidationSummary());
|
||||
|
||||
Assert.That(log, Is.EqualTo("none"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void BuildInvalidParticipantTowerLog_Formats_TowerIds_And_Reasons()
|
||||
{
|
||||
CombatParticipantTowerValidationSummary summary = new CombatParticipantTowerValidationSummary
|
||||
{
|
||||
InvalidResults = new[]
|
||||
{
|
||||
new CombatParticipantTowerValidationResult
|
||||
{
|
||||
TowerInstanceId = 90002,
|
||||
FailureReason = CombatParticipantTowerValidationFailureReason.MissingBaseComponent
|
||||
},
|
||||
new CombatParticipantTowerValidationResult
|
||||
{
|
||||
TowerInstanceId = 90003,
|
||||
FailureReason = CombatParticipantTowerValidationFailureReason.MissingBearingComponent
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
string log = ProcedureMainCombatEntryValidationService.BuildInvalidParticipantTowerLog(summary);
|
||||
|
||||
Assert.That(log, Is.EqualTo("#90002:MissingBaseComponent, #90003:MissingBearingComponent"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void BuildBlockedCombatDialogRawData_Returns_InventoryUnavailable_Message()
|
||||
{
|
||||
DialogFormRawData rawData = ProcedureMainCombatEntryValidationService.BuildBlockedCombatDialogRawData(
|
||||
new ProcedureMainCombatEntryValidationResult
|
||||
{
|
||||
BlockReason = ProcedureMainCombatEntryBlockReason.InventoryUnavailable,
|
||||
ValidationSummary = new CombatParticipantTowerValidationSummary()
|
||||
});
|
||||
|
||||
Assert.That(rawData.Title, Is.EqualTo("无法进入战斗"));
|
||||
Assert.That(rawData.Message, Is.EqualTo("当前无法读取库存快照,暂时不能进入战斗。请重新进入本轮流程后再试。"));
|
||||
Assert.That(rawData.ConfirmText, Is.EqualTo("知道了"));
|
||||
Assert.That(rawData.Mode, Is.EqualTo(1));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void BuildBlockedCombatDialogRawData_Returns_Generic_Message_When_NoParticipantTower_Is_Assigned()
|
||||
{
|
||||
DialogFormRawData rawData = ProcedureMainCombatEntryValidationService.BuildBlockedCombatDialogRawData(
|
||||
new ProcedureMainCombatEntryValidationResult
|
||||
{
|
||||
BlockReason = ProcedureMainCombatEntryBlockReason.NoValidParticipantTower,
|
||||
ValidationSummary = new CombatParticipantTowerValidationSummary()
|
||||
});
|
||||
|
||||
Assert.That(
|
||||
rawData.Message,
|
||||
Is.EqualTo("参战区至少需要 1 座完整装配了枪口、轴承、底座的塔,才能进入战斗。"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void BuildBlockedCombatDialogRawData_Lists_Invalid_Tower_Reasons()
|
||||
{
|
||||
DialogFormRawData rawData = ProcedureMainCombatEntryValidationService.BuildBlockedCombatDialogRawData(
|
||||
new ProcedureMainCombatEntryValidationResult
|
||||
{
|
||||
BlockReason = ProcedureMainCombatEntryBlockReason.NoValidParticipantTower,
|
||||
ValidationSummary = new CombatParticipantTowerValidationSummary
|
||||
{
|
||||
InvalidResults = new[]
|
||||
{
|
||||
new CombatParticipantTowerValidationResult
|
||||
{
|
||||
TowerInstanceId = 90002,
|
||||
FailureReason = CombatParticipantTowerValidationFailureReason.MissingBaseComponent
|
||||
},
|
||||
new CombatParticipantTowerValidationResult
|
||||
{
|
||||
TowerInstanceId = 90003,
|
||||
FailureReason = CombatParticipantTowerValidationFailureReason.MissingMuzzleComponent
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Assert.That(
|
||||
rawData.Message,
|
||||
Is.EqualTo("参战区没有可出战的完整塔。\n塔 #90002 缺少底座组件。\n塔 #90003 缺少枪口组件。"));
|
||||
}
|
||||
|
||||
private static RunState CreateTwoNodeRun()
|
||||
{
|
||||
return RunStateFactory.Create(
|
||||
@@ -181,5 +347,38 @@ namespace GeometryTD.Tests.EditMode
|
||||
new RunNodeSeed { NodeId = 102, NodeType = RunNodeType.Event }
|
||||
});
|
||||
}
|
||||
|
||||
private static BackpackInventoryData CreateCombatInventory()
|
||||
{
|
||||
BackpackInventoryData inventory = new BackpackInventoryData();
|
||||
inventory.MuzzleComponents.Add(new MuzzleCompItemData
|
||||
{
|
||||
InstanceId = 10001,
|
||||
Name = "枪口",
|
||||
Endurance = 100f
|
||||
});
|
||||
inventory.BearingComponents.Add(new BearingCompItemData
|
||||
{
|
||||
InstanceId = 20001,
|
||||
Name = "轴承",
|
||||
Endurance = 100f
|
||||
});
|
||||
inventory.BaseComponents.Add(new BaseCompItemData
|
||||
{
|
||||
InstanceId = 30001,
|
||||
Name = "底座",
|
||||
Endurance = 100f
|
||||
});
|
||||
inventory.Towers.Add(new TowerItemData
|
||||
{
|
||||
InstanceId = 90001,
|
||||
Name = "合法塔",
|
||||
MuzzleComponentInstanceId = 10001,
|
||||
BearingComponentInstanceId = 20001,
|
||||
BaseComponentInstanceId = 30001
|
||||
});
|
||||
inventory.ParticipantTowerInstanceIds.Add(90001);
|
||||
return inventory;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user