feat(mosstank): add VTank-style automation PoC

This commit is contained in:
Erik 2026-08-27 18:57:21 +02:00
parent f6fe0f2a4f
commit 4e6e9bc9d9
212 changed files with 49462 additions and 416 deletions

View file

@ -1750,6 +1750,45 @@ public sealed class LiveSessionControllerTests
Assert.True(host.CommandBuses[^1].Active);
}
[Fact]
public void NextLoginAutomaticallyEntersTheRememberedRosterCharacterOnce()
{
var calls = new List<string>();
var operations = new TestOperations(calls)
{
Characters = new CharacterList.Parsed(
0u,
[
new CharacterList.Character(0x50000010u, "Alpha", 0u),
new CharacterList.Character(0x50000020u, "Beta", 0u),
],
[],
11,
"Canonical",
true,
true),
};
var host = new TestHost(calls);
var controller = new LiveSessionController(operations);
Assert.Equal(
LiveSessionStartStatus.Connected,
controller.Start(LiveOptions(), host).Status);
Assert.Equal(0x50000010u, host.Selections[^1].CharacterId);
Assert.True(controller.TrySetNextLogin(0x50000020u));
Assert.Equal(0x50000020u, controller.NextLoginCharacterId);
RuntimeCommandResult result =
controller.CompleteCharacterLogOff(controller.Generation);
Assert.True(result.Accepted);
Assert.True(controller.IsInWorld);
Assert.Equal(0u, controller.NextLoginCharacterId);
Assert.Equal(2, operations.EnterWorldCount);
Assert.Equal(0x50000020u, host.Selections[^1].CharacterId);
Assert.Contains("enter:1", calls);
Assert.True(controller.ClearNextLogin());
}
[Fact]
public void CompleteCharacterLogOff_RefusalsAndFailureDegradeToStop()
{