test(streaming): close lifecycle gate after cutover

This commit is contained in:
Erik 2026-07-21 23:41:15 +02:00
parent db3ca59fd0
commit 4a205a3e56
7 changed files with 173 additions and 17 deletions

View file

@ -342,6 +342,58 @@ public sealed class LandblockBuildOriginTests
Assert.DoesNotContain("_liveCenterY", renderPublisherSource, StringComparison.Ordinal);
}
[Fact]
public void GameWindowShutdownKeepsStreamerAliveUntilSessionResetConverges()
{
string source = File.ReadAllText(Path.Combine(
FindRepoRoot(),
"src",
"AcDream.App",
"Rendering",
"GameWindow.cs"));
int sessionStage = source.IndexOf(
"new ResourceShutdownStage(\"session lifetime\"",
StringComparison.Ordinal);
Assert.True(sessionStage >= 0);
int sessionOperation = source.IndexOf(
"new(\"live session\", () =>",
sessionStage,
StringComparison.Ordinal);
Assert.True(sessionOperation > sessionStage);
int sessionDispose = source.IndexOf(
"controller.Dispose()",
sessionOperation,
StringComparison.Ordinal);
Assert.True(sessionDispose > sessionOperation);
int disposalCompletionBarrier = source.IndexOf(
"if (!controller.IsDisposalComplete)",
sessionDispose,
StringComparison.Ordinal);
Assert.True(disposalCompletionBarrier > sessionDispose);
int sessionReferenceRelease = source.IndexOf(
"_liveSessionController = null;",
disposalCompletionBarrier,
StringComparison.Ordinal);
Assert.True(sessionReferenceRelease > disposalCompletionBarrier);
int dependentStage = source.IndexOf(
"new ResourceShutdownStage(\"session dependents\"",
sessionReferenceRelease,
StringComparison.Ordinal);
Assert.True(dependentStage > sessionReferenceRelease);
int streamerDispose = source.IndexOf(
"new(\"streamer\", () => _streamer?.Dispose())",
dependentStage,
StringComparison.Ordinal);
Assert.True(streamerDispose > dependentStage);
}
private static LandblockBuild EmptyBuild(uint landblockId, LandblockBuildOrigin origin) =>
new(
new LoadedLandblock(