using AcDream.App.Rendering; using AcDream.Core.Rendering; using Xunit; namespace AcDream.App.Tests.Rendering; public class CameraControllerTests { private static (CameraController ctl, ChaseCamera legacy, RetailChaseCamera retail) MakeChaseFixture() { var orbit = new OrbitCamera(); var fly = new FlyCamera(); var ctl = new CameraController(orbit, fly); var legacy = new ChaseCamera(); var retail = new RetailChaseCamera(); ctl.EnterChaseMode(legacy, retail); return (ctl, legacy, retail); } [Fact] public void ChaseMode_WhenFlagOff_ActiveIsLegacy() { bool saved = CameraDiagnostics.UseRetailChaseCamera; try { CameraDiagnostics.UseRetailChaseCamera = false; var (ctl, legacy, _) = MakeChaseFixture(); Assert.Same(legacy, ctl.Active); Assert.True(ctl.IsChaseMode); } finally { CameraDiagnostics.UseRetailChaseCamera = saved; } } [Fact] public void ChaseMode_WhenFlagOn_ActiveIsRetail() { bool saved = CameraDiagnostics.UseRetailChaseCamera; try { CameraDiagnostics.UseRetailChaseCamera = true; var (ctl, _, retail) = MakeChaseFixture(); Assert.Same(retail, ctl.Active); Assert.True(ctl.IsChaseMode); } finally { CameraDiagnostics.UseRetailChaseCamera = saved; } } [Fact] public void ChaseMode_FlagFlipped_ActiveSwaps() { bool saved = CameraDiagnostics.UseRetailChaseCamera; try { CameraDiagnostics.UseRetailChaseCamera = false; var (ctl, legacy, retail) = MakeChaseFixture(); Assert.Same(legacy, ctl.Active); CameraDiagnostics.UseRetailChaseCamera = true; Assert.Same(retail, ctl.Active); CameraDiagnostics.UseRetailChaseCamera = false; Assert.Same(legacy, ctl.Active); } finally { CameraDiagnostics.UseRetailChaseCamera = saved; } } [Fact] public void ExitChaseMode_ClearsBothCameras() { bool saved = CameraDiagnostics.UseRetailChaseCamera; try { CameraDiagnostics.UseRetailChaseCamera = false; var (ctl, _, _) = MakeChaseFixture(); ctl.ExitChaseMode(); Assert.Null(ctl.Chase); Assert.Null(ctl.RetailChase); Assert.False(ctl.IsChaseMode); } finally { CameraDiagnostics.UseRetailChaseCamera = saved; } } }