140 lines
6.0 KiB
C#
140 lines
6.0 KiB
C#
using GeometryTD.Definition;
|
|
using GeometryTD.Procedure;
|
|
using NUnit.Framework;
|
|
|
|
namespace GeometryTD.Tests.EditMode
|
|
{
|
|
public sealed class ProcedureMainServicesTests
|
|
{
|
|
[Test]
|
|
public void TryAdvanceRun_Returns_AdvancedToNextNode_For_Normal_Completion()
|
|
{
|
|
RunState runState = CreateTwoNodeRun();
|
|
|
|
ProcedureMainRunAdvanceResult result = ProcedureMainRunFlowService.TryAdvanceRun(
|
|
runState,
|
|
RunNodeCompletionStatus.Completed,
|
|
new BackpackInventoryData { Gold = 88 });
|
|
|
|
Assert.That(result, Is.EqualTo(ProcedureMainRunAdvanceResult.AdvancedToNextNode));
|
|
Assert.That(runState.IsCompleted, Is.False);
|
|
Assert.That(runState.Nodes[0].Status, Is.EqualTo(RunNodeStatus.Completed));
|
|
Assert.That(runState.CurrentNodeIndex, Is.EqualTo(1));
|
|
Assert.That(runState.CurrentNode.Status, Is.EqualTo(RunNodeStatus.Available));
|
|
Assert.That(runState.RunInventorySnapshot.Gold, Is.EqualTo(88));
|
|
}
|
|
|
|
[Test]
|
|
public void TryAdvanceRun_Returns_NodeException_For_Exception_Fallback()
|
|
{
|
|
RunState runState = CreateTwoNodeRun();
|
|
|
|
ProcedureMainRunAdvanceResult result = ProcedureMainRunFlowService.TryAdvanceRun(
|
|
runState,
|
|
RunNodeCompletionStatus.Exception,
|
|
new BackpackInventoryData { Gold = 5 });
|
|
|
|
Assert.That(result, Is.EqualTo(ProcedureMainRunAdvanceResult.NodeException));
|
|
Assert.That(runState.IsCompleted, Is.False);
|
|
Assert.That(runState.CurrentNodeIndex, Is.EqualTo(0));
|
|
Assert.That(runState.CurrentNode.Status, Is.EqualTo(RunNodeStatus.Exception));
|
|
Assert.That(runState.Nodes[1].Status, Is.EqualTo(RunNodeStatus.Locked));
|
|
Assert.That(runState.RunInventorySnapshot.Gold, Is.EqualTo(5));
|
|
}
|
|
|
|
[Test]
|
|
public void TryAdvanceRun_Returns_RunCompleted_When_Last_Node_Finishes()
|
|
{
|
|
RunState runState = RunStateFactory.Create(
|
|
LevelThemeType.Plain,
|
|
new BackpackInventoryData { Gold = 30 },
|
|
new[]
|
|
{
|
|
new RunNodeSeed { NodeId = 901, NodeType = RunNodeType.BossCombat, LinkedLevelId = 4 }
|
|
});
|
|
|
|
ProcedureMainRunAdvanceResult result = ProcedureMainRunFlowService.TryAdvanceRun(
|
|
runState,
|
|
RunNodeCompletionStatus.Completed,
|
|
new BackpackInventoryData { Gold = 123 });
|
|
|
|
Assert.That(result, Is.EqualTo(ProcedureMainRunAdvanceResult.RunCompleted));
|
|
Assert.That(runState.IsCompleted, Is.True);
|
|
Assert.That(runState.CurrentNodeIndex, Is.EqualTo(1));
|
|
Assert.That(runState.CompletedNodeCount, Is.EqualTo(1));
|
|
Assert.That(runState.RunInventorySnapshot.Gold, Is.EqualTo(123));
|
|
}
|
|
|
|
[Test]
|
|
public void TryAdvanceRun_Returns_NoChange_When_Run_Cannot_Advance()
|
|
{
|
|
ProcedureMainRunAdvanceResult nullRunResult = ProcedureMainRunFlowService.TryAdvanceRun(
|
|
null,
|
|
RunNodeCompletionStatus.Completed,
|
|
new BackpackInventoryData { Gold = 1 });
|
|
|
|
Assert.That(nullRunResult, Is.EqualTo(ProcedureMainRunAdvanceResult.NoChange));
|
|
|
|
RunState completedRun = RunStateFactory.Create(
|
|
LevelThemeType.Plain,
|
|
new BackpackInventoryData { Gold = 10 },
|
|
new RunNodeSeed[0]);
|
|
|
|
ProcedureMainRunAdvanceResult completedRunResult = ProcedureMainRunFlowService.TryAdvanceRun(
|
|
completedRun,
|
|
RunNodeCompletionStatus.Completed,
|
|
new BackpackInventoryData { Gold = 20 });
|
|
|
|
Assert.That(completedRunResult, Is.EqualTo(ProcedureMainRunAdvanceResult.NoChange));
|
|
Assert.That(completedRun.RunInventorySnapshot.Gold, Is.EqualTo(10));
|
|
}
|
|
|
|
[Test]
|
|
public void TryEnterCompletedPendingFinish_Shows_Dialog_Only_Once()
|
|
{
|
|
ProcedureMainRunCompletionResult firstResult =
|
|
ProcedureMainRunCompletionService.TryEnterCompletedPendingFinish(false);
|
|
ProcedureMainRunCompletionResult secondResult =
|
|
ProcedureMainRunCompletionService.TryEnterCompletedPendingFinish(true);
|
|
|
|
Assert.That(firstResult, Is.EqualTo(ProcedureMainRunCompletionResult.ShowCompletionDialog));
|
|
Assert.That(secondResult, Is.EqualTo(ProcedureMainRunCompletionResult.NoChange));
|
|
}
|
|
|
|
[Test]
|
|
public void TryConfirmReturnToMenu_Returns_Menu_Only_In_Completed_Pending_Finish()
|
|
{
|
|
ProcedureMainRunCompletionResult validResult =
|
|
ProcedureMainRunCompletionService.TryConfirmReturnToMenu(
|
|
ProcedureMainFlowPhase.RunCompletedPendingFinish,
|
|
false);
|
|
|
|
ProcedureMainRunCompletionResult hubResult =
|
|
ProcedureMainRunCompletionService.TryConfirmReturnToMenu(
|
|
ProcedureMainFlowPhase.Hub,
|
|
false);
|
|
|
|
ProcedureMainRunCompletionResult pendingResult =
|
|
ProcedureMainRunCompletionService.TryConfirmReturnToMenu(
|
|
ProcedureMainFlowPhase.RunCompletedPendingFinish,
|
|
true);
|
|
|
|
Assert.That(validResult, Is.EqualTo(ProcedureMainRunCompletionResult.ReturnToMenu));
|
|
Assert.That(hubResult, Is.EqualTo(ProcedureMainRunCompletionResult.NoChange));
|
|
Assert.That(pendingResult, Is.EqualTo(ProcedureMainRunCompletionResult.NoChange));
|
|
}
|
|
|
|
private static RunState CreateTwoNodeRun()
|
|
{
|
|
return RunStateFactory.Create(
|
|
LevelThemeType.Plain,
|
|
new BackpackInventoryData { Gold = 50 },
|
|
new[]
|
|
{
|
|
new RunNodeSeed { NodeId = 101, NodeType = RunNodeType.Combat, LinkedLevelId = 1 },
|
|
new RunNodeSeed { NodeId = 102, NodeType = RunNodeType.Event }
|
|
});
|
|
}
|
|
}
|
|
}
|