Pos.AlignTests.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. namespace Terminal.Gui.LayoutTests;
  2. public class PosAlignTests
  3. {
  4. [Fact]
  5. public void PosAlign_Constructor ()
  6. {
  7. var posAlign = new PosAlign
  8. {
  9. Aligner = new ()
  10. };
  11. Assert.NotNull (posAlign);
  12. Assert.Equal (Alignment.Start, posAlign.Aligner.Alignment);
  13. Assert.Equal (AlignmentModes.StartToEnd, posAlign.Aligner.AlignmentModes);
  14. Assert.Equal (0, posAlign.Aligner.ContainerSize);
  15. }
  16. [Fact]
  17. public void PosAlign_StaticFactory_Defaults ()
  18. {
  19. var posAlign = Pos.Align (Alignment.Start) as PosAlign;
  20. Assert.NotNull (posAlign);
  21. Assert.Equal (Alignment.Start, posAlign.Aligner.Alignment);
  22. Assert.Equal (AlignmentModes.StartToEnd | AlignmentModes.AddSpaceBetweenItems, posAlign.Aligner.AlignmentModes);
  23. Assert.Equal (0, posAlign.Aligner.ContainerSize);
  24. }
  25. [Theory]
  26. [InlineData (Alignment.Start, Alignment.Start, AlignmentModes.AddSpaceBetweenItems, AlignmentModes.AddSpaceBetweenItems, true)]
  27. [InlineData (Alignment.Center, Alignment.Center, AlignmentModes.AddSpaceBetweenItems, AlignmentModes.AddSpaceBetweenItems, true)]
  28. [InlineData (Alignment.Start, Alignment.Center, AlignmentModes.AddSpaceBetweenItems, AlignmentModes.AddSpaceBetweenItems, false)]
  29. [InlineData (Alignment.Center, Alignment.Start, AlignmentModes.AddSpaceBetweenItems, AlignmentModes.AddSpaceBetweenItems, false)]
  30. [InlineData (Alignment.Start, Alignment.Start, AlignmentModes.StartToEnd, AlignmentModes.AddSpaceBetweenItems, false)]
  31. public void PosAlign_Equals (Alignment align1, Alignment align2, AlignmentModes mode1, AlignmentModes mode2, bool expectedEquals)
  32. {
  33. var posAlign1 = new PosAlign
  34. {
  35. Aligner = new()
  36. {
  37. Alignment = align1,
  38. AlignmentModes = mode1
  39. }
  40. };
  41. var posAlign2 = new PosAlign
  42. {
  43. Aligner = new()
  44. {
  45. Alignment = align2,
  46. AlignmentModes = mode2
  47. }
  48. };
  49. Assert.Equal (expectedEquals, posAlign1.Equals (posAlign2));
  50. Assert.Equal (expectedEquals, posAlign2.Equals (posAlign1));
  51. }
  52. [Fact]
  53. public void PosAlign_Equals_CachedLocation_Not_Used ()
  54. {
  55. View superView = new ()
  56. {
  57. Width = 10,
  58. Height = 25
  59. };
  60. View view = new ();
  61. superView.Add (view);
  62. Pos posAlign1 = Pos.Align (Alignment.Center);
  63. view.X = posAlign1;
  64. int pos1 = posAlign1.Calculate (10, Dim.Absolute (0)!, view, Dimension.Width);
  65. Pos posAlign2 = Pos.Align (Alignment.Center);
  66. view.Y = posAlign2;
  67. int pos2 = posAlign2.Calculate (25, Dim.Absolute (0)!, view, Dimension.Height);
  68. Assert.NotEqual (pos1, pos2);
  69. Assert.Equal (posAlign1, posAlign2);
  70. }
  71. [Fact]
  72. public void PosAlign_ToString ()
  73. {
  74. Pos posAlign = Pos.Align (Alignment.Fill);
  75. var expectedString = "Align(alignment=Fill,modes=AddSpaceBetweenItems,groupId=0)";
  76. Assert.Equal (expectedString, posAlign.ToString ());
  77. }
  78. [Fact]
  79. public void PosAlign_Anchor ()
  80. {
  81. Pos posAlign = Pos.Align (Alignment.Start);
  82. var width = 50;
  83. int expectedAnchor = -width;
  84. Assert.Equal (expectedAnchor, posAlign.GetAnchor (width));
  85. }
  86. [Fact]
  87. public void PosAlign_CreatesCorrectInstance ()
  88. {
  89. Pos pos = Pos.Align (Alignment.Start);
  90. Assert.IsType<PosAlign> (pos);
  91. }
  92. // TODO: Test scenarios where views with matching GroupId's are added/removed from a Superview
  93. // TODO: Make AlignAndUpdateGroup internal and write low-level unit tests for it
  94. }