AdornmentSubViewTests.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using Xunit.Abstractions;
  2. namespace Terminal.Gui.ViewTests;
  3. public class AdornmentSubViewTests (ITestOutputHelper output)
  4. {
  5. private readonly ITestOutputHelper _output = output;
  6. [Theory]
  7. [InlineData (0, 0, false)] // Margin has no thickness, so false
  8. [InlineData (0, 1, false)] // Margin has no thickness, so false
  9. [InlineData (1, 0, true)]
  10. [InlineData (1, 1, true)]
  11. [InlineData (2, 1, true)]
  12. public void Adornment_WithSubView_GetViewsUnderMouse_Finds (int viewMargin, int subViewMargin, bool expectedFound)
  13. {
  14. Application.Top = new Toplevel()
  15. {
  16. Width = 10,
  17. Height = 10
  18. };
  19. Application.Top.Margin.Thickness = new Thickness (viewMargin);
  20. var subView = new View ()
  21. {
  22. X = 0,
  23. Y = 0,
  24. Width = 5,
  25. Height = 5
  26. };
  27. subView.Margin.Thickness = new Thickness (subViewMargin);
  28. Application.Top.Margin.Add (subView);
  29. var foundView = View.GetViewsUnderMouse (new Point(0, 0)).LastOrDefault ();
  30. bool found = foundView == subView || foundView == subView.Margin;
  31. Assert.Equal (expectedFound, found);
  32. Application.Top.Dispose ();
  33. Application.ResetState (ignoreDisposed: true);
  34. }
  35. [Fact]
  36. public void Adornment_WithNonVisibleSubView_GetViewsUnderMouse_Finds_Adornment ()
  37. {
  38. Application.Top = new Toplevel ()
  39. {
  40. Width = 10,
  41. Height = 10
  42. };
  43. Application.Top.Padding.Thickness = new Thickness (1);
  44. var subView = new View ()
  45. {
  46. X = 0,
  47. Y = 0,
  48. Width = 1,
  49. Height = 1,
  50. Visible = false
  51. };
  52. Application.Top.Padding.Add (subView);
  53. Assert.Equal (Application.Top.Padding, View.GetViewsUnderMouse (new Point(0, 0)).LastOrDefault ());
  54. Application.Top?.Dispose ();
  55. Application.ResetState (ignoreDisposed: true);
  56. }
  57. [Fact]
  58. public void Setting_Thickness_Causes_Adornment_SubView_Layout ()
  59. {
  60. var view = new View ();
  61. var subView = new View ();
  62. view.Margin.Add (subView);
  63. view.BeginInit ();
  64. view.EndInit ();
  65. var raised = false;
  66. subView.LayoutStarted += LayoutStarted;
  67. view.Margin.Thickness = new Thickness (1, 2, 3, 4);
  68. Assert.True (raised);
  69. return;
  70. void LayoutStarted (object sender, LayoutEventArgs e)
  71. {
  72. raised = true;
  73. }
  74. }
  75. }