Browse Source

Fixed leak tests.

`IRenderer` mock was keeping hold of references passed to `AddDirty` -
tried resetting the mock but references were still held, so replaced the
mock `IRenderer` with a `NullRenderer` that fixes the problem.
Steven Kirk 8 years ago
parent
commit
9a015afa99
1 changed files with 38 additions and 8 deletions
  1. 38 8
      tests/Avalonia.LeakTests/ControlTests.cs

+ 38 - 8
tests/Avalonia.LeakTests/ControlTests.cs

@@ -30,7 +30,7 @@ namespace Avalonia.LeakTests
         [Fact]
         public void Canvas_Is_Freed()
         {
-            using (UnitTestApplication.Start(TestServices.StyledWindow))
+            using (Start())
             {
                 Func<Window> run = () =>
                 {
@@ -63,7 +63,7 @@ namespace Avalonia.LeakTests
         [Fact]
         public void Named_Canvas_Is_Freed()
         {
-            using (UnitTestApplication.Start(TestServices.StyledWindow))
+            using (Start())
             {
                 Func<Window> run = () =>
                 {
@@ -100,7 +100,7 @@ namespace Avalonia.LeakTests
         [Fact]
         public void ScrollViewer_With_Content_Is_Freed()
         {
-            using (UnitTestApplication.Start(TestServices.StyledWindow))
+            using (Start())
             {
                 Func<Window> run = () =>
                 {
@@ -140,7 +140,7 @@ namespace Avalonia.LeakTests
         [Fact]
         public void TextBox_Is_Freed()
         {
-            using (UnitTestApplication.Start(TestServices.StyledWindow))
+            using (Start())
             {
                 Func<Window> run = () =>
                 {
@@ -175,7 +175,7 @@ namespace Avalonia.LeakTests
         [Fact]
         public void TextBox_With_Xaml_Binding_Is_Freed()
         {
-            using (UnitTestApplication.Start(TestServices.StyledWindow))
+            using (Start())
             {
                 Func<Window> run = () =>
                 {
@@ -222,7 +222,7 @@ namespace Avalonia.LeakTests
         [Fact]
         public void TextBox_Class_Listeners_Are_Freed()
         {
-            using (UnitTestApplication.Start(TestServices.StyledWindow))
+            using (Start())
             {
                 TextBox textBox;
 
@@ -258,7 +258,7 @@ namespace Avalonia.LeakTests
         [Fact]
         public void TreeView_Is_Freed()
         {
-            using (UnitTestApplication.Start(TestServices.StyledWindow))
+            using (Start())
             {
                 Func<Window> run = () =>
                 {
@@ -311,7 +311,7 @@ namespace Avalonia.LeakTests
         [Fact]
         public void RendererIsDisposed()
         {
-            using (UnitTestApplication.Start(TestServices.StyledWindow))
+            using (Start())
             {
                 var renderer = new Mock<IRenderer>();
                 renderer.Setup(x => x.Dispose());
@@ -334,10 +334,40 @@ namespace Avalonia.LeakTests
             }
         }
 
+        private IDisposable Start()
+        {
+            var services = TestServices.StyledWindow.With(renderer: (root, loop) => new NullRenderer());
+            return UnitTestApplication.Start(services);
+        }
+
         private class Node
         {
             public string Name { get; set; }
             public IEnumerable<Node> Children { get; set; }
         }
+
+        private class NullRenderer : IRenderer
+        {
+            public bool DrawFps { get; set; }
+            public bool DrawDirtyRects { get; set; }
+
+            public void AddDirty(IVisual visual)
+            {
+            }
+
+            public void Dispose()
+            {
+            }
+
+            public IEnumerable<IVisual> HitTest(Point p, Func<IVisual, bool> filter) => null;
+
+            public void Paint(Rect rect)
+            {
+            }
+
+            public void Resized(Size size)
+            {
+            }
+        }
     }
 }