using Recordingtest.Bridge; using Recordingtest.Hmeg.Bridge; using Xunit; namespace Recordingtest.Hmeg.Bridge.Tests; public class HmegDirectStateProviderTests { [Fact] public void NullLambdas_Return_SafeDefaults_NoThrow() { var p = new HmegDirectStateProvider( spaceProvider: () => null, viewportProvider: () => null); Assert.Empty(p.GetSelectedIds()); var c = p.GetCamera(); Assert.Equal(45.0, c.Fov); Assert.Equal(new double[] { 0, 0, 1 }, c.Up); var s = p.GetScene(); Assert.Equal(0, s.ObjectCount); Assert.Null(s.DocumentPath); Assert.True(p.GetRenderComplete()); } [Fact] public void Throwing_Lambdas_Are_Swallowed_Returns_SafeDefaults() { var p = new HmegDirectStateProvider( spaceProvider: () => throw new InvalidOperationException("boom"), viewportProvider: () => throw new InvalidOperationException("boom")); Assert.Empty(p.GetSelectedIds()); var c = p.GetCamera(); Assert.Equal(45.0, c.Fov); var s = p.GetScene(); Assert.Equal(0, s.ObjectCount); } [Fact] public void DocumentPathProvider_Is_Used_For_Scene() { var p = new HmegDirectStateProvider( spaceProvider: () => null, viewportProvider: () => null, documentPathProvider: () => "C:/sample.hmeg"); var s = p.GetScene(); Assert.Equal("C:/sample.hmeg", s.DocumentPath); } [Fact] public void DocumentPathProvider_Throwing_Is_Swallowed() { var p = new HmegDirectStateProvider( spaceProvider: () => null, viewportProvider: () => null, documentPathProvider: () => throw new InvalidOperationException()); var s = p.GetScene(); Assert.Null(s.DocumentPath); } [Fact] public void Constructor_Throws_OnNullProviders() { Assert.Throws(() => new HmegDirectStateProvider(null!, () => null)); Assert.Throws(() => new HmegDirectStateProvider(() => null, null!)); } }