PopoverWrapperTests.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. using Terminal.Gui.App;
  2. using Terminal.Gui.Views;
  3. namespace ApplicationTests;
  4. public class PopoverWrapperTests
  5. {
  6. [Fact]
  7. public void Constructor_SetsDefaults ()
  8. {
  9. var wrapper = new PopoverWrapper<View> { WrappedView = new View () };
  10. Assert.Equal ("popoverWrapper", wrapper.Id);
  11. Assert.True (wrapper.CanFocus);
  12. Assert.Equal (Dim.Fill (), wrapper.Width);
  13. Assert.Equal (Dim.Fill (), wrapper.Height);
  14. Assert.True (wrapper.ViewportSettings.HasFlag (ViewportSettingsFlags.Transparent));
  15. Assert.True (wrapper.ViewportSettings.HasFlag (ViewportSettingsFlags.TransparentMouse));
  16. }
  17. [Fact]
  18. public void WrappedView_CanBeSet ()
  19. {
  20. var view = new View { Id = "testView" };
  21. var wrapper = new PopoverWrapper<View> { WrappedView = view };
  22. Assert.Same (view, wrapper.WrappedView);
  23. Assert.Equal ("testView", wrapper.WrappedView.Id);
  24. }
  25. [Fact]
  26. public void EndInit_AddsWrappedViewAsSubview ()
  27. {
  28. var view = new View { Id = "wrapped" };
  29. var wrapper = new PopoverWrapper<View> { WrappedView = view };
  30. wrapper.BeginInit ();
  31. wrapper.EndInit ();
  32. Assert.Contains (view, wrapper.SubViews);
  33. Assert.Same (wrapper, view.SuperView);
  34. }
  35. [Fact]
  36. public void CanBeRegisteredAndShown ()
  37. {
  38. var view = new View
  39. {
  40. X = Pos.Center (),
  41. Y = Pos.Center (),
  42. Width = 20,
  43. Height = 10
  44. };
  45. var wrapper = new PopoverWrapper<View> { WrappedView = view };
  46. var popoverManager = new ApplicationPopover ();
  47. popoverManager.Register (wrapper);
  48. Assert.Contains (wrapper, popoverManager.Popovers);
  49. popoverManager.Show (wrapper);
  50. Assert.Equal (wrapper, popoverManager.GetActivePopover ());
  51. Assert.True (wrapper.Visible);
  52. }
  53. [Fact]
  54. public void QuitCommand_HidesPopover ()
  55. {
  56. var view = new View ();
  57. var wrapper = new PopoverWrapper<View> { WrappedView = view };
  58. var popoverManager = new ApplicationPopover ();
  59. popoverManager.Register (wrapper);
  60. popoverManager.Show (wrapper);
  61. Assert.True (wrapper.Visible);
  62. wrapper.InvokeCommand (Command.Quit);
  63. Assert.False (wrapper.Visible);
  64. }
  65. [Fact]
  66. public void AsPopover_Extension_CreatesWrapper ()
  67. {
  68. var view = new View { Id = "testView" };
  69. PopoverWrapper<View> wrapper = view.AsPopover ();
  70. Assert.NotNull (wrapper);
  71. Assert.Same (view, wrapper.WrappedView);
  72. }
  73. [Fact]
  74. public void AsPopover_Extension_ThrowsIfViewIsNull ()
  75. {
  76. View? view = null;
  77. Assert.Throws<ArgumentNullException> (() => view!.AsPopover ());
  78. }
  79. [Fact]
  80. public void WrappedView_ReceivesInput ()
  81. {
  82. var textField = new TextField { Width = 20 };
  83. var wrapper = new PopoverWrapper<TextField> { WrappedView = textField };
  84. wrapper.BeginInit ();
  85. wrapper.EndInit ();
  86. var popoverManager = new ApplicationPopover ();
  87. popoverManager.Register (wrapper);
  88. popoverManager.Show (wrapper);
  89. Assert.True (wrapper.Visible);
  90. Assert.Contains (textField, wrapper.SubViews);
  91. }
  92. [Fact]
  93. public void Multiple_Types_CanBeWrapped ()
  94. {
  95. var label = new Label { Text = "Test" };
  96. var labelWrapper = new PopoverWrapper<Label> { WrappedView = label };
  97. var button = new Button { Title = "Click" };
  98. var buttonWrapper = new PopoverWrapper<Button> { WrappedView = button };
  99. var listView = new ListView ();
  100. var listViewWrapper = new PopoverWrapper<ListView> { WrappedView = listView };
  101. Assert.Same (label, labelWrapper.WrappedView);
  102. Assert.Same (button, buttonWrapper.WrappedView);
  103. Assert.Same (listView, listViewWrapper.WrappedView);
  104. }
  105. [Fact]
  106. public void Current_Property_CanBeSetAndGet ()
  107. {
  108. var view = new View ();
  109. var wrapper = new PopoverWrapper<View> { WrappedView = view };
  110. var runnable = new Runnable ();
  111. wrapper.Current = runnable;
  112. Assert.Same (runnable, wrapper.Current);
  113. }
  114. [Fact]
  115. public void Disposed_Wrapper_DisposesWrappedView ()
  116. {
  117. var view = new View ();
  118. var wrapper = new PopoverWrapper<View> { WrappedView = view };
  119. wrapper.BeginInit ();
  120. wrapper.EndInit ();
  121. bool viewDisposed = false;
  122. view.Disposing += (s, e) => viewDisposed = true;
  123. wrapper.Dispose ();
  124. Assert.True (viewDisposed);
  125. }
  126. }