WindowBaseTests.cs 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. using System;
  2. using System.Reactive;
  3. using System.Reactive.Subjects;
  4. using Moq;
  5. using Avalonia.Controls.Presenters;
  6. using Avalonia.Controls.Templates;
  7. using Avalonia.Input;
  8. using Avalonia.Input.Raw;
  9. using Avalonia.Layout;
  10. using Avalonia.Platform;
  11. using Avalonia.Rendering;
  12. using Avalonia.Styling;
  13. using Avalonia.UnitTests;
  14. using Xunit;
  15. namespace Avalonia.Controls.UnitTests
  16. {
  17. public class WindowBaseTests
  18. {
  19. [Fact]
  20. public void Activate_Should_Call_Impl_Activate()
  21. {
  22. using (UnitTestApplication.Start(TestServices.StyledWindow))
  23. {
  24. var impl = new Mock<IWindowBaseImpl>();
  25. var target = new TestWindowBase(impl.Object);
  26. target.Activate();
  27. impl.Verify(x => x.Activate());
  28. }
  29. }
  30. [Fact]
  31. public void Impl_Activate_Should_Call_Raise_Activated_Event()
  32. {
  33. using (UnitTestApplication.Start(TestServices.StyledWindow))
  34. {
  35. var impl = new Mock<IWindowBaseImpl>();
  36. impl.SetupAllProperties();
  37. bool raised = false;
  38. var target = new TestWindowBase(impl.Object);
  39. target.Activated += (s, e) => raised = true;
  40. impl.Object.Activated();
  41. Assert.True(raised);
  42. }
  43. }
  44. [Fact]
  45. public void Impl_Deactivate_Should_Call_Raise_Deativated_Event()
  46. {
  47. using (UnitTestApplication.Start(TestServices.StyledWindow))
  48. {
  49. var impl = new Mock<IWindowBaseImpl>();
  50. impl.SetupAllProperties();
  51. bool raised = false;
  52. var target = new TestWindowBase(impl.Object);
  53. target.Deactivated += (s, e) => raised = true;
  54. impl.Object.Deactivated();
  55. Assert.True(raised);
  56. }
  57. }
  58. [Fact]
  59. public void IsVisible_Should_Initially_Be_False()
  60. {
  61. using (UnitTestApplication.Start(TestServices.MockWindowingPlatform))
  62. {
  63. var target = new TestWindowBase();
  64. Assert.False(target.IsVisible);
  65. }
  66. }
  67. [Fact]
  68. public void IsVisible_Should_Be_True_After_Show()
  69. {
  70. using (UnitTestApplication.Start(TestServices.StyledWindow))
  71. {
  72. var target = new TestWindowBase();
  73. target.Show();
  74. Assert.True(target.IsVisible);
  75. }
  76. }
  77. [Fact]
  78. public void IsVisible_Should_Be_False_Atfer_Hide()
  79. {
  80. using (UnitTestApplication.Start(TestServices.StyledWindow))
  81. {
  82. var target = new TestWindowBase();
  83. target.Show();
  84. target.Hide();
  85. Assert.False(target.IsVisible);
  86. }
  87. }
  88. [Fact]
  89. public void IsVisible_Should_Be_False_Atfer_Impl_Signals_Close()
  90. {
  91. var windowImpl = new Mock<IPopupImpl>();
  92. windowImpl.Setup(x => x.DesktopScaling).Returns(1);
  93. windowImpl.Setup(x => x.RenderScaling).Returns(1);
  94. windowImpl.SetupProperty(x => x.Closed);
  95. using (UnitTestApplication.Start(TestServices.StyledWindow))
  96. {
  97. var target = new TestWindowBase(windowImpl.Object);
  98. target.Show();
  99. windowImpl.Object.Closed();
  100. Assert.False(target.IsVisible);
  101. }
  102. }
  103. [Fact]
  104. public void Setting_IsVisible_True_Shows_Window()
  105. {
  106. var windowImpl = new Mock<IPopupImpl>();
  107. windowImpl.Setup(x => x.DesktopScaling).Returns(1);
  108. windowImpl.Setup(x => x.RenderScaling).Returns(1);
  109. using (UnitTestApplication.Start(TestServices.StyledWindow))
  110. {
  111. var target = new TestWindowBase(windowImpl.Object);
  112. target.IsVisible = true;
  113. windowImpl.Verify(x => x.Show(true, false));
  114. }
  115. }
  116. [Fact]
  117. public void Setting_IsVisible_False_Hides_Window()
  118. {
  119. var windowImpl = new Mock<IPopupImpl>();
  120. windowImpl.Setup(x => x.DesktopScaling).Returns(1);
  121. windowImpl.Setup(x => x.RenderScaling).Returns(1);
  122. using (UnitTestApplication.Start(TestServices.StyledWindow))
  123. {
  124. var target = new TestWindowBase(windowImpl.Object);
  125. target.Show();
  126. target.IsVisible = false;
  127. windowImpl.Verify(x => x.Hide());
  128. }
  129. }
  130. [Fact]
  131. public void Showing_Should_Start_Renderer()
  132. {
  133. using (UnitTestApplication.Start(TestServices.StyledWindow))
  134. {
  135. var renderer = new Mock<IRenderer>();
  136. var target = new TestWindowBase(renderer.Object);
  137. target.Show();
  138. renderer.Verify(x => x.Start(), Times.Once);
  139. }
  140. }
  141. [Fact]
  142. public void Showing_Should_Raise_Opened()
  143. {
  144. using (UnitTestApplication.Start(TestServices.StyledWindow))
  145. {
  146. var target = new TestWindowBase();
  147. var raised = false;
  148. target.Opened += (s, e) => raised = true;
  149. target.Show();
  150. Assert.True(raised);
  151. }
  152. }
  153. [Fact]
  154. public void Hiding_Should_Stop_Renderer()
  155. {
  156. using (UnitTestApplication.Start(TestServices.StyledWindow))
  157. {
  158. var renderer = new Mock<IRenderer>();
  159. var target = new TestWindowBase(renderer.Object);
  160. target.Show();
  161. target.Hide();
  162. renderer.Verify(x => x.Stop(), Times.Once);
  163. }
  164. }
  165. [Fact]
  166. public void Renderer_Should_Be_Disposed_When_Impl_Signals_Close()
  167. {
  168. using (UnitTestApplication.Start(TestServices.StyledWindow))
  169. {
  170. var renderer = new Mock<IRenderer>();
  171. var windowImpl = new Mock<IPopupImpl>();
  172. windowImpl.Setup(x => x.DesktopScaling).Returns(1);
  173. windowImpl.Setup(x => x.RenderScaling).Returns(1);
  174. windowImpl.SetupProperty(x => x.Closed);
  175. windowImpl.Setup(x => x.CreateRenderer(It.IsAny<IRenderRoot>())).Returns(renderer.Object);
  176. var target = new TestWindowBase(windowImpl.Object);
  177. target.Show();
  178. windowImpl.Object.Closed();
  179. renderer.Verify(x => x.Dispose(), Times.Once);
  180. }
  181. }
  182. private static FuncControlTemplate<TestWindowBase> CreateTemplate()
  183. {
  184. return new FuncControlTemplate<TestWindowBase>((x, scope) =>
  185. new ContentPresenter
  186. {
  187. Name = "PART_ContentPresenter",
  188. [!ContentPresenter.ContentProperty] = x[!ContentControl.ContentProperty],
  189. }.RegisterInNameScope(scope));
  190. }
  191. private class TestWindowBase : WindowBase
  192. {
  193. public bool IsClosed { get; private set; }
  194. public TestWindowBase(IRenderer renderer = null)
  195. : base(Mock.Of<IWindowBaseImpl>(x =>
  196. x.RenderScaling == 1 &&
  197. x.CreateRenderer(It.IsAny<IRenderRoot>()) == renderer))
  198. {
  199. }
  200. public TestWindowBase(IWindowBaseImpl impl)
  201. : base(impl)
  202. {
  203. }
  204. }
  205. }
  206. }