using Moq; namespace Terminal.Gui.ViewTests.OrientationTests; public class OrientationHelperTests { [Fact] public void Orientation_Set_NewValue_InvokesChangingAndChangedEvents () { // Arrange Mock mockIOrientation = new Mock (); var orientationHelper = new OrientationHelper (mockIOrientation.Object); var changingEventInvoked = 0; var changedEventInvoked = 0; orientationHelper.OrientationChanging += (sender, e) => { changingEventInvoked++; }; orientationHelper.OrientationChanged += (sender, e) => { changedEventInvoked++; }; // Act orientationHelper.Orientation = Orientation.Vertical; // Assert Assert.Equal (1, changingEventInvoked); Assert.Equal(1, changedEventInvoked); } [Fact] public void Orientation_Set_NewValue_InvokesOnChangingAndOnChangedOverrides () { // Arrange Mock mockIOrientation = new Mock (); var onChangingOverrideCalled = 0; var onChangedOverrideCalled = 0; mockIOrientation.Setup (x => x.OnOrientationChanging (It.IsAny (), It.IsAny ())) .Callback (() => onChangingOverrideCalled++) .Returns (false); // Ensure it doesn't cancel the change mockIOrientation.Setup (x => x.OnOrientationChanged (It.IsAny ())) .Callback (() => onChangedOverrideCalled++); var orientationHelper = new OrientationHelper (mockIOrientation.Object); // Act orientationHelper.Orientation = Orientation.Vertical; // Assert Assert.Equal (1, onChangingOverrideCalled); Assert.Equal (1, onChangedOverrideCalled); } [Fact] public void Orientation_Set_SameValue_DoesNotInvokeChangingOrChangedEvents () { // Arrange Mock mockIOrientation = new Mock (); var orientationHelper = new OrientationHelper (mockIOrientation.Object); orientationHelper.Orientation = Orientation.Horizontal; // Set initial orientation var changingEventInvoked = 0; var changedEventInvoked = 0; orientationHelper.OrientationChanging += (sender, e) => { changingEventInvoked++; }; orientationHelper.OrientationChanged += (sender, e) => { changedEventInvoked++; }; // Act orientationHelper.Orientation = Orientation.Horizontal; // Set to the same value // Assert Assert.Equal (0, changingEventInvoked); Assert.Equal (0, changedEventInvoked); } [Fact] public void Orientation_Set_NewValue_OrientationChanging_CancellationPreventsChange () { // Arrange Mock mockIOrientation = new Mock (); var orientationHelper = new OrientationHelper (mockIOrientation.Object); orientationHelper.OrientationChanging += (sender, e) => { e.Cancel = true; }; // Cancel the change // Act orientationHelper.Orientation = Orientation.Vertical; // Assert Assert.Equal (Orientation.Horizontal, orientationHelper.Orientation); // Initial orientation is Horizontal } [Fact] public void Orientation_Set_NewValue_OnOrientationChanging_CancelsChange () { // Arrange Mock mockIOrientation = new Mock (); mockIOrientation.Setup (x => x.OnOrientationChanging (It.IsAny (), It.IsAny ())) .Returns (true); // Override to return true, cancelling the change var orientationHelper = new OrientationHelper (mockIOrientation.Object); // Act orientationHelper.Orientation = Orientation.Vertical; // Assert Assert.Equal ( Orientation.Horizontal, orientationHelper.Orientation); // Initial orientation is Horizontal, and it should remain unchanged due to cancellation } }