using Recordingtest.Bridge; using Recordingtest.EgPlugin; using Xunit; namespace Recordingtest.EgPlugin.Tests; public class ChainedEngineStateProviderTests { private sealed class ScriptedProvider : IEngineStateProvider { public IReadOnlyList SelectedIds = Array.Empty(); public CameraSnapshot Camera = new( new double[] { 0, 0, 0 }, new double[] { 0, 0, 0 }, new double[] { 0, 0, 1 }, 45.0); public SceneSnapshot Scene = new(0, null); public bool Render = true; public IReadOnlyList GetSelectedIds() => SelectedIds; public CameraSnapshot GetCamera() => Camera; public SceneSnapshot GetScene() => Scene; public bool GetRenderComplete() => Render; } [Fact] public void Selection_Primary_NonEmpty_Wins() { var p = new ScriptedProvider { SelectedIds = new[] { "a" } }; var f = new ScriptedProvider { SelectedIds = new[] { "fallback" } }; var c = new ChainedEngineStateProvider(p, f); Assert.Equal(new[] { "a" }, c.GetSelectedIds()); } [Fact] public void Selection_Primary_Empty_Falls_Through() { var p = new ScriptedProvider(); var f = new ScriptedProvider { SelectedIds = new[] { "fallback" } }; var c = new ChainedEngineStateProvider(p, f); Assert.Equal(new[] { "fallback" }, c.GetSelectedIds()); } [Fact] public void Camera_Primary_Default_Falls_Through() { var p = new ScriptedProvider(); var fc = new CameraSnapshot(new double[] { 1, 2, 3 }, new double[] { 4, 5, 6 }, new double[] { 0, 0, 1 }, 60); var f = new ScriptedProvider { Camera = fc }; var c = new ChainedEngineStateProvider(p, f); Assert.Equal(60.0, c.GetCamera().Fov); } [Fact] public void Camera_Primary_NonDefault_Wins() { var pc = new CameraSnapshot(new double[] { 1, 0, 0 }, new double[] { 0, 0, 0 }, new double[] { 0, 0, 1 }, 30); var p = new ScriptedProvider { Camera = pc }; var f = new ScriptedProvider(); var c = new ChainedEngineStateProvider(p, f); Assert.Equal(30.0, c.GetCamera().Fov); } [Fact] public void Scene_Primary_Empty_Falls_Through() { var p = new ScriptedProvider(); var f = new ScriptedProvider { Scene = new(7, "x.hmeg") }; var c = new ChainedEngineStateProvider(p, f); var s = c.GetScene(); Assert.Equal(7, s.ObjectCount); Assert.Equal("x.hmeg", s.DocumentPath); } [Fact] public void Scene_Primary_Has_Path_Wins_Even_With_Zero_Objects() { var p = new ScriptedProvider { Scene = new(0, "primary.hmeg") }; var f = new ScriptedProvider { Scene = new(99, "fallback.hmeg") }; var c = new ChainedEngineStateProvider(p, f); var s = c.GetScene(); Assert.Equal("primary.hmeg", s.DocumentPath); } [Fact] public void Render_Primary_Always_Wins() { var p = new ScriptedProvider { Render = false }; var f = new ScriptedProvider { Render = true }; var c = new ChainedEngineStateProvider(p, f); Assert.False(c.GetRenderComplete()); } }