AdornmentSubViewTests.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using Xunit.Abstractions;
  2. namespace ViewBaseTests.Adornments;
  3. public class AdornmentSubViewTests ()
  4. {
  5. [Fact]
  6. public void Setting_Thickness_Causes_Adornment_SubView_Layout ()
  7. {
  8. var view = new View ();
  9. var subView = new View ();
  10. view.Margin!.Add (subView);
  11. view.BeginInit ();
  12. view.EndInit ();
  13. var raised = false;
  14. subView.SubViewLayout += LayoutStarted;
  15. view.Margin.Thickness = new Thickness (1, 2, 3, 4);
  16. view.Layout ();
  17. Assert.True (raised);
  18. return;
  19. void LayoutStarted (object? sender, LayoutEventArgs e)
  20. {
  21. raised = true;
  22. }
  23. }
  24. [Theory]
  25. [InlineData (0, 0, false)] // Margin has no thickness, so false
  26. [InlineData (0, 1, false)] // Margin has no thickness, so false
  27. [InlineData (1, 0, true)]
  28. [InlineData (1, 1, true)]
  29. [InlineData (2, 1, true)]
  30. public void Adornment_WithSubView_Finds (int viewMargin, int subViewMargin, bool expectedFound)
  31. {
  32. IApplication? app = Application.Create ();
  33. Runnable<bool> runnable = new ()
  34. {
  35. Width = 10,
  36. Height = 10
  37. };
  38. app.Begin (runnable);
  39. runnable.Margin!.Thickness = new Thickness (viewMargin);
  40. // Turn of TransparentMouse for the test
  41. runnable.Margin!.ViewportSettings = ViewportSettingsFlags.None;
  42. var subView = new View ()
  43. {
  44. X = 0,
  45. Y = 0,
  46. Width = 5,
  47. Height = 5
  48. };
  49. subView.Margin!.Thickness = new Thickness (subViewMargin);
  50. // Turn of TransparentMouse for the test
  51. subView.Margin!.ViewportSettings = ViewportSettingsFlags.None;
  52. runnable.Margin!.Add (subView);
  53. runnable.Layout ();
  54. var foundView = runnable.GetViewsUnderLocation (new Point (0, 0), ViewportSettingsFlags.None).LastOrDefault ();
  55. bool found = foundView == subView || foundView == subView.Margin;
  56. Assert.Equal (expectedFound, found);
  57. }
  58. [Fact]
  59. public void Adornment_WithNonVisibleSubView_Finds_Adornment ()
  60. {
  61. IApplication? app = Application.Create ();
  62. Runnable<bool> runnable = new ()
  63. {
  64. Width = 10,
  65. Height = 10
  66. };
  67. app.Begin (runnable);
  68. runnable.Padding!.Thickness = new Thickness (1);
  69. var subView = new View ()
  70. {
  71. X = 0,
  72. Y = 0,
  73. Width = 1,
  74. Height = 1,
  75. Visible = false
  76. };
  77. runnable.Padding.Add (subView);
  78. runnable.Layout ();
  79. Assert.Equal (runnable.Padding, runnable.GetViewsUnderLocation (new Point (0, 0), ViewportSettingsFlags.None).LastOrDefault ());
  80. }
  81. }