OrientationHelperTests.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. using Moq;
  2. namespace Terminal.Gui.ViewTests.OrientationTests;
  3. public class OrientationHelperTests
  4. {
  5. [Fact]
  6. public void Orientation_Set_NewValue_InvokesChangingAndChangedEvents ()
  7. {
  8. // Arrange
  9. Mock<IOrientation> mockIOrientation = new Mock<IOrientation> ();
  10. var orientationHelper = new OrientationHelper (mockIOrientation.Object);
  11. var changingEventInvoked = 0;
  12. var changedEventInvoked = 0;
  13. orientationHelper.OrientationChanging += (sender, e) => { changingEventInvoked++; };
  14. orientationHelper.OrientationChanged += (sender, e) => { changedEventInvoked++; };
  15. // Act
  16. orientationHelper.Orientation = Orientation.Vertical;
  17. // Assert
  18. Assert.Equal (1, changingEventInvoked);
  19. Assert.Equal(1, changedEventInvoked);
  20. }
  21. [Fact]
  22. public void Orientation_Set_NewValue_InvokesOnChangingAndOnChangedOverrides ()
  23. {
  24. // Arrange
  25. Mock<IOrientation> mockIOrientation = new Mock<IOrientation> ();
  26. var onChangingOverrideCalled = 0;
  27. var onChangedOverrideCalled = 0;
  28. mockIOrientation.Setup (x => x.OnOrientationChanging (It.IsAny<Orientation> (), It.IsAny<Orientation> ()))
  29. .Callback (() => onChangingOverrideCalled++)
  30. .Returns (false); // Ensure it doesn't cancel the change
  31. mockIOrientation.Setup (x => x.OnOrientationChanged (It.IsAny<Orientation> ()))
  32. .Callback (() => onChangedOverrideCalled++);
  33. var orientationHelper = new OrientationHelper (mockIOrientation.Object);
  34. // Act
  35. orientationHelper.Orientation = Orientation.Vertical;
  36. // Assert
  37. Assert.Equal (1, onChangingOverrideCalled);
  38. Assert.Equal (1, onChangedOverrideCalled);
  39. }
  40. [Fact]
  41. public void Orientation_Set_SameValue_DoesNotInvokeChangingOrChangedEvents ()
  42. {
  43. // Arrange
  44. Mock<IOrientation> mockIOrientation = new Mock<IOrientation> ();
  45. var orientationHelper = new OrientationHelper (mockIOrientation.Object);
  46. orientationHelper.Orientation = Orientation.Horizontal; // Set initial orientation
  47. var changingEventInvoked = 0;
  48. var changedEventInvoked = 0;
  49. orientationHelper.OrientationChanging += (sender, e) => { changingEventInvoked++; };
  50. orientationHelper.OrientationChanged += (sender, e) => { changedEventInvoked++; };
  51. // Act
  52. orientationHelper.Orientation = Orientation.Horizontal; // Set to the same value
  53. // Assert
  54. Assert.Equal (0, changingEventInvoked);
  55. Assert.Equal (0, changedEventInvoked);
  56. }
  57. [Fact]
  58. public void Orientation_Set_NewValue_OrientationChanging_CancellationPreventsChange ()
  59. {
  60. // Arrange
  61. Mock<IOrientation> mockIOrientation = new Mock<IOrientation> ();
  62. var orientationHelper = new OrientationHelper (mockIOrientation.Object);
  63. orientationHelper.OrientationChanging += (sender, e) => { e.Cancel = true; }; // Cancel the change
  64. // Act
  65. orientationHelper.Orientation = Orientation.Vertical;
  66. // Assert
  67. Assert.Equal (Orientation.Horizontal, orientationHelper.Orientation); // Initial orientation is Horizontal
  68. }
  69. [Fact]
  70. public void Orientation_Set_NewValue_OnOrientationChanging_CancelsChange ()
  71. {
  72. // Arrange
  73. Mock<IOrientation> mockIOrientation = new Mock<IOrientation> ();
  74. mockIOrientation.Setup (x => x.OnOrientationChanging (It.IsAny<Orientation> (), It.IsAny<Orientation> ()))
  75. .Returns (true); // Override to return true, cancelling the change
  76. var orientationHelper = new OrientationHelper (mockIOrientation.Object);
  77. // Act
  78. orientationHelper.Orientation = Orientation.Vertical;
  79. // Assert
  80. Assert.Equal (
  81. Orientation.Horizontal,
  82. orientationHelper.Orientation); // Initial orientation is Horizontal, and it should remain unchanged due to cancellation
  83. }
  84. }