fix(runtime): close Campaign LA7b review findings
This commit is contained in:
parent
0e82cbf700
commit
1b9e7e41f9
11 changed files with 700 additions and 28 deletions
|
|
@ -23,6 +23,18 @@ public sealed class RuntimeCharacterSelectionStateTests
|
|||
onDelta(delta);
|
||||
}
|
||||
|
||||
private sealed class ManualTimeProvider : TimeProvider
|
||||
{
|
||||
private long _timestamp;
|
||||
|
||||
public override long TimestampFrequency => TimeSpan.TicksPerSecond;
|
||||
|
||||
public override long GetTimestamp() => _timestamp;
|
||||
|
||||
public void Advance(TimeSpan elapsed) =>
|
||||
_timestamp += elapsed.Ticks;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ApplyRoster_PortsRetailOrderFallbackAndDisabledButtonMatrix()
|
||||
{
|
||||
|
|
@ -154,9 +166,10 @@ public sealed class RuntimeCharacterSelectionStateTests
|
|||
}
|
||||
|
||||
[Fact]
|
||||
public void RestoreResponse_FromSupersededRequestCannotCompleteTheCurrentRequest()
|
||||
public void DelayedFlagOnlyRestoreResponse_CannotCompleteNewerRequest()
|
||||
{
|
||||
using var state = new RuntimeCharacterSelectionState();
|
||||
var time = new ManualTimeProvider();
|
||||
using var state = new RuntimeCharacterSelectionState(time);
|
||||
state.Begin(new RuntimeGenerationToken(12));
|
||||
state.ApplyRoster(Roster(
|
||||
new(0x50000001u, "First", 1u),
|
||||
|
|
@ -164,18 +177,55 @@ public sealed class RuntimeCharacterSelectionStateTests
|
|||
|
||||
Assert.True(state.TryBeginRestore(out _));
|
||||
Assert.True(state.TryHighlight(0x50000002u));
|
||||
Assert.False(state.TryBeginRestore(out _));
|
||||
time.Advance(RuntimeCharacterSelectionState.RestoreCorrelationTimeout);
|
||||
Assert.True(state.SweepRestoreCorrelation());
|
||||
Assert.True(state.TryBeginRestore(out _));
|
||||
long revision = state.Snapshot.Revision;
|
||||
state.ApplyRestore(new CharacterRestore.Parsed(
|
||||
1u,
|
||||
0x50000001u,
|
||||
"First",
|
||||
0u));
|
||||
VerificationFlag: 2u,
|
||||
Guid: null,
|
||||
Name: null,
|
||||
SecondsGreyedOut: null));
|
||||
|
||||
Assert.Equal(
|
||||
RuntimeCharacterSelectionOperation.RestoreRequested,
|
||||
state.Snapshot.Operation);
|
||||
Assert.Equal(0x50000002u, state.Snapshot.LastRestoreRequestedCharacterId);
|
||||
Assert.Equal(revision, state.Snapshot.Revision);
|
||||
Assert.True(state.View.TryGet(0x50000001u, out var first));
|
||||
Assert.True(first.IsPendingDelete);
|
||||
Assert.True(state.View.TryGet(0x50000002u, out var second));
|
||||
Assert.True(second.IsPendingDelete);
|
||||
Assert.False(state.Snapshot.Buttons.CanRestore);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NoReplyRestoreTimeout_ReleasesOnlyRestoreGate()
|
||||
{
|
||||
var time = new ManualTimeProvider();
|
||||
using var state = new RuntimeCharacterSelectionState(time);
|
||||
state.Begin(new RuntimeGenerationToken(13));
|
||||
state.ApplyRoster(Roster(
|
||||
new(0x50000001u, "Pending", 1u),
|
||||
new(0x50000002u, "Ready", 0u)));
|
||||
|
||||
Assert.True(state.TryHighlight(0x50000001u));
|
||||
Assert.True(state.TryBeginRestore(out _));
|
||||
Assert.False(state.Snapshot.Buttons.CanRestore);
|
||||
Assert.True(state.TryHighlight(0x50000002u));
|
||||
Assert.True(state.BeginEnter(out var ready));
|
||||
Assert.Equal(0x50000002u, ready.CharacterId);
|
||||
|
||||
state.ReturnToSelection();
|
||||
Assert.True(state.TryHighlight(0x50000001u));
|
||||
Assert.True(state.TryBeginRestore(out _));
|
||||
time.Advance(RuntimeCharacterSelectionState.RestoreCorrelationTimeout);
|
||||
Assert.True(state.SweepRestoreCorrelation());
|
||||
Assert.Equal(
|
||||
RuntimeCharacterSelectionOperation.None,
|
||||
state.Snapshot.Operation);
|
||||
Assert.True(state.Snapshot.Buttons.CanRestore);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue