From 6dc6ec84e975bef1f65d75816a8b558e48b4bd46 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Mon, 2 Oct 2017 21:57:47 -0500 Subject: [PATCH] Add leak test to make sure the method accessor doesn't leak memory. --- .../ExpressionObserverTests.cs | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/Avalonia.LeakTests/ExpressionObserverTests.cs b/tests/Avalonia.LeakTests/ExpressionObserverTests.cs index 3dbc62424f..d0f892bebb 100644 --- a/tests/Avalonia.LeakTests/ExpressionObserverTests.cs +++ b/tests/Avalonia.LeakTests/ExpressionObserverTests.cs @@ -71,6 +71,28 @@ namespace Avalonia.LeakTests Assert.Equal(0, memory.GetObjects(where => where.Type.Is()).ObjectsCount)); } + [Fact] + public void Should_Not_Keep_Source_Alive_MethodBinding() + { + Func run = () => + { + var source = new { Foo = new MethodBound() }; + var target = new ExpressionObserver(source, "Foo.A"); + target.Subscribe(_ => { }); + return target; + }; + + var result = run(); + + dotMemory.Check(memory => + Assert.Equal(0, memory.GetObjects(where => where.Type.Is()).ObjectsCount)); + } + + private class MethodBound + { + public void A() { } + } + private class NonIntegerIndexer : NotifyingBase { private readonly Dictionary _storage = new Dictionary();