using System.Text.RegularExpressions; using AcDream.App.Runtime; using AcDream.App.Streaming; using AcDream.Runtime; using AcDream.Runtime.World; namespace AcDream.App.Tests.Runtime; public sealed class RuntimeWorldTransitOwnershipTests { [Fact] public void ProductionConstructsOneRuntimeTransitOwnerAndNoAppLifecycleOwner() { string root = FindRepositoryRoot(); string appRoot = Path.Combine(root, "src", "AcDream.App"); string app = string.Join( "\n", Directory.EnumerateFiles(appRoot, "*.cs", SearchOption.AllDirectories) .Select(File.ReadAllText)); Assert.False(File.Exists(Path.Combine( appRoot, "Streaming", "WorldRevealLifecycleTelemetry.cs"))); Assert.False(File.Exists(Path.Combine( appRoot, "Streaming", "TeleportTransitCoordinator.cs"))); Assert.DoesNotContain( "class WorldRevealLifecycleTelemetry", app, StringComparison.Ordinal); Assert.DoesNotContain( "class TeleportTransitCoordinator", app, StringComparison.Ordinal); Assert.DoesNotContain( "record struct WorldRevealLifecycleSnapshot", app, StringComparison.Ordinal); Assert.Single(Regex.Matches( app, @"new\s+RuntimeWorldTransitState\s*\(") .Cast()); } [Fact] public void GraphicalAdaptersBorrowRuntimeStateWithoutReconstructingPortalView() { var availabilityFields = typeof(WorldGenerationAvailabilityState) .GetFields( System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); Assert.Single(availabilityFields); Assert.Equal( typeof(RuntimeWorldTransitState), availabilityFields[0].FieldType); var viewFields = typeof(CurrentGameRuntimeViewAdapter) .GetFields( System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); Assert.Contains( viewFields, field => field.FieldType == typeof(IRuntimePortalView)); Assert.DoesNotContain( typeof(CurrentGameRuntimeViewAdapter).GetNestedTypes( System.Reflection.BindingFlags.NonPublic), type => type.Name.Contains( "PortalView", StringComparison.Ordinal)); var coordinatorFields = typeof(WorldRevealCoordinator) .GetFields( System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); Assert.Contains( coordinatorFields, field => field.FieldType == typeof(RuntimeWorldTransitState)); Assert.DoesNotContain( coordinatorFields, field => field.Name is "_activeGeneration" or "_worldSimulationReleased" or "_lifecycle"); var teleportFields = typeof(LocalPlayerTeleportController) .GetFields( System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); Assert.Single( teleportFields, field => field.FieldType == typeof(RuntimeWorldTransitState)); Assert.DoesNotContain( teleportFields, field => field.Name.Contains( "acceptedDestination", StringComparison.OrdinalIgnoreCase)); } private static string FindRepositoryRoot() { var current = new DirectoryInfo(AppContext.BaseDirectory); while (current is not null) { if (File.Exists(Path.Combine(current.FullName, "AcDream.slnx"))) return current.FullName; current = current.Parent; } throw new DirectoryNotFoundException("AcDream.slnx was not found."); } }