Forráskód Böngészése

Add failing leak test for Path control.

Dariusz Komosinski 5 éve
szülő
commit
b3c0035b0b
1 módosított fájl, 40 hozzáadás és 0 törlés
  1. 40 0
      tests/Avalonia.LeakTests/ControlTests.cs

+ 40 - 0
tests/Avalonia.LeakTests/ControlTests.cs

@@ -3,6 +3,7 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Runtime.Remoting.Contexts;
 using Avalonia.Controls;
+using Avalonia.Controls.Shapes;
 using Avalonia.Controls.Templates;
 using Avalonia.Diagnostics;
 using Avalonia.Input;
@@ -492,6 +493,45 @@ namespace Avalonia.LeakTests
             }
         }
 
+        [Fact]
+        public void Path_Is_Freed()
+        {
+            using (Start())
+            {
+                var geometry = new EllipseGeometry { Rect = new Rect(0, 0, 10, 10) };
+
+                Func<Window> run = () =>
+                {
+                    var window = new Window
+                    {
+                        Content = new Path
+                        {
+                            Data = geometry
+                        }
+                    };
+
+                    window.Show();
+
+                    window.LayoutManager.ExecuteInitialLayoutPass(window);
+                    Assert.IsType<Path>(window.Presenter.Child);
+
+                    window.Content = null;
+                    window.LayoutManager.ExecuteLayoutPass();
+                    Assert.Null(window.Presenter.Child);
+
+                    return window;
+                };
+
+                var result = run();
+
+                dotMemory.Check(memory =>
+                    Assert.Equal(0, memory.GetObjects(where => where.Type.Is<Path>()).ObjectsCount));
+
+                // We are keeping geometry alive to simulate a resource that outlives the control.
+                GC.KeepAlive(geometry);
+            }
+        }
+
         private IDisposable Start()
         {
             return UnitTestApplication.Start(TestServices.StyledWindow.With(