InitTests.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. using Xunit.Abstractions;
  2. namespace Terminal.Gui.ViewTests;
  3. /// <summary>Tests View BeginInit/EndInit/Initialized functionality.</summary>
  4. public class InitTests
  5. {
  6. private readonly ITestOutputHelper _output;
  7. public InitTests (ITestOutputHelper output) { _output = output; }
  8. // Test behavior of calling BeginInit multiple times
  9. [Fact]
  10. public void BeginInit_Called_Multiple_Times_Throws ()
  11. {
  12. var view = new View ();
  13. var superView = new View ();
  14. superView.Add (view);
  15. Assert.False (view.IsInitialized, "View should not be initialized");
  16. Assert.False (superView.IsInitialized, "SuperView should not be initialized");
  17. superView.BeginInit ();
  18. superView.EndInit ();
  19. Assert.True (view.IsInitialized, "View should be initialized");
  20. Assert.True (superView.IsInitialized, "SuperView should be initialized");
  21. Assert.Throws<InvalidOperationException> (() => superView.BeginInit ());
  22. }
  23. [Fact]
  24. public void BeginInit_EndInit_Initialized ()
  25. {
  26. var view = new View ();
  27. Assert.False (view.IsInitialized, "View should not be initialized");
  28. view.BeginInit ();
  29. Assert.False (view.IsInitialized, "View should not be initialized");
  30. view.EndInit ();
  31. Assert.True (view.IsInitialized, "View should be initialized");
  32. }
  33. [Fact]
  34. public void BeginInit_EndInit_Initialized_WithSuperView ()
  35. {
  36. var view = new View ();
  37. var superView = new View ();
  38. superView.Add (view);
  39. Assert.False (view.IsInitialized, "View should not be initialized");
  40. view.BeginInit ();
  41. Assert.False (view.IsInitialized, "View should not be initialized");
  42. view.EndInit ();
  43. Assert.True (view.IsInitialized, "View should be initialized");
  44. Assert.False (superView.IsInitialized, "SuperView should not be initialized");
  45. }
  46. [Fact]
  47. public void BeginInit_EndInit_SuperView_Initialized ()
  48. {
  49. var view = new View ();
  50. var superView = new View ();
  51. superView.Add (view);
  52. Assert.False (view.IsInitialized, "View should not be initialized");
  53. Assert.False (superView.IsInitialized, "SuperView should not be initialized");
  54. superView.BeginInit ();
  55. Assert.False (view.IsInitialized, "View should not be initialized");
  56. Assert.False (superView.IsInitialized, "SuperView should not be initialized");
  57. superView.EndInit ();
  58. Assert.True (view.IsInitialized, "View should be initialized");
  59. Assert.True (superView.IsInitialized, "SuperView should be initialized");
  60. }
  61. [Fact]
  62. public void BeginInit_EndInit_SuperView_Initialized_WithSuperSuperView ()
  63. {
  64. var view = new View ();
  65. var superView = new View ();
  66. var superSuperView = new View ();
  67. superSuperView.Add (superView);
  68. superView.Add (view);
  69. Assert.False (view.IsInitialized, "View should not be initialized");
  70. Assert.False (superView.IsInitialized, "SuperView should not be initialized");
  71. Assert.False (superSuperView.IsInitialized, "SuperSuperView should not be initialized");
  72. superSuperView.BeginInit ();
  73. Assert.False (view.IsInitialized, "View should not be initialized");
  74. Assert.False (superView.IsInitialized, "SuperView should not be initialized");
  75. Assert.False (superSuperView.IsInitialized, "SuperSuperView should not be initialized");
  76. superSuperView.EndInit ();
  77. Assert.True (view.IsInitialized, "View should be initialized");
  78. Assert.True (superView.IsInitialized, "SuperView should be initialized");
  79. Assert.True (superSuperView.IsInitialized, "SuperSuperView should be initialized");
  80. }
  81. // Test behavior of calling EndInit multiple times
  82. [Fact]
  83. public void EndInit_Called_Multiple_Times_Throws ()
  84. {
  85. var view = new View ();
  86. var superView = new View ();
  87. superView.Add (view);
  88. var initialized = false;
  89. view.Initialized += (s, e) => initialized = true;
  90. var superViewInitialized = false;
  91. superView.Initialized += (s, e) => superViewInitialized = true;
  92. Assert.False (view.IsInitialized, "View should not be initialized");
  93. Assert.False (superView.IsInitialized, "SuperView should not be initialized");
  94. superView.BeginInit ();
  95. superView.EndInit ();
  96. Assert.True (view.IsInitialized, "View should be initialized");
  97. Assert.True (superView.IsInitialized, "SuperView should be initialized");
  98. Assert.True (initialized, "View: Initialized event should have been raised");
  99. Assert.True (superViewInitialized, "SuperView: Initialized event should have been raised");
  100. Assert.Throws<InvalidOperationException> (() => superView.EndInit ());
  101. }
  102. // Test calling EndInit without first calling BeginInit
  103. [Fact]
  104. public void EndInit_Called_Without_BeginInit_Throws ()
  105. {
  106. var view = new View ();
  107. var superView = new View ();
  108. superView.Add (view);
  109. //var initialized = false;
  110. //view.Initialized += (s, e) => initialized = true;
  111. //var superViewInitialized = false;
  112. //superView.Initialized += (s, e) => superViewInitialized = true;
  113. Assert.False (view.IsInitialized, "View should not be initialized");
  114. Assert.False (superView.IsInitialized, "SuperView should not be initialized");
  115. // TODO: Implement logic that does this in Begin/EndInit
  116. //Assert.Throws<InvalidOperationException> (() => superView.EndInit ());
  117. }
  118. // Initialized event
  119. [Fact]
  120. public void InitializedEvent_Fires_On_EndInit ()
  121. {
  122. var view = new View ();
  123. var superView = new View ();
  124. superView.Add (view);
  125. var initialized = false;
  126. view.Initialized += (s, e) => initialized = true;
  127. var superViewInitialized = false;
  128. superView.Initialized += (s, e) => superViewInitialized = true;
  129. Assert.False (initialized, "View: Initialized event should not have been raised");
  130. Assert.False (superViewInitialized, "SuperView: Initialized event should not have been raised");
  131. superView.BeginInit ();
  132. Assert.False (initialized, "View: Initialized event should not have been raised");
  133. Assert.False (superViewInitialized, "SuperView: Initialized event should not have been raised");
  134. superView.EndInit ();
  135. Assert.True (initialized, "View: Initialized event should have been raised");
  136. Assert.True (superViewInitialized, "SuperView: Initialized event should have been raised");
  137. }
  138. // TODO: Create tests that prove ISupportInitialize and ISupportInitializeNotifications work properly
  139. }