1 changed files with 70 additions and 0 deletions
@ -0,0 +1,70 @@ |
|||||
|
using System; |
||||
|
using Avalonia.Controls; |
||||
|
using Avalonia.Controls.ApplicationLifetimes; |
||||
|
using Avalonia.Reactive; |
||||
|
using Avalonia.Threading; |
||||
|
using Avalonia.UnitTests; |
||||
|
using JetBrains.dotMemoryUnit; |
||||
|
using Xunit; |
||||
|
using Xunit.Abstractions; |
||||
|
|
||||
|
namespace Avalonia.LeakTests; |
||||
|
|
||||
|
internal class ViewModelForDisposingTest |
||||
|
{ |
||||
|
~ViewModelForDisposingTest() { ; } |
||||
|
} |
||||
|
|
||||
|
[DotMemoryUnit(FailIfRunWithoutSupport = false)] |
||||
|
public class WindowDataContextTests |
||||
|
{ |
||||
|
public WindowDataContextTests(ITestOutputHelper atr) |
||||
|
{ |
||||
|
DotMemoryUnitTestOutput.SetOutputMethod(atr.WriteLine); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void Window_DataContext_Disposed_After_Window_Close_With_Lifetime() |
||||
|
{ |
||||
|
static IDisposable Run() |
||||
|
{ |
||||
|
var unitTestApp = UnitTestApplication.Start(TestServices.StyledWindow); |
||||
|
var lifetime = new ClassicDesktopStyleApplicationLifetime(); |
||||
|
lifetime.ShutdownMode = ShutdownMode.OnExplicitShutdown; |
||||
|
var window = new Window { DataContext = new ViewModelForDisposingTest() }; |
||||
|
window.Show(); |
||||
|
window.Close(); |
||||
|
|
||||
|
return Disposable.Create(lifetime, lt => lt.Shutdown()) |
||||
|
.DisposeWith(new CompositeDisposable(lifetime, unitTestApp)); |
||||
|
} |
||||
|
|
||||
|
using var _ = Run(); |
||||
|
// Process all Loaded events to free control reference(s)
|
||||
|
Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded); |
||||
|
GC.Collect(); |
||||
|
|
||||
|
dotMemory.Check(m => Assert.Equal(0, |
||||
|
m.GetObjects(o => o.Type.Is<ViewModelForDisposingTest>()).ObjectsCount)); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void Window_DataContext_Disposed_After_Window_Close_Without_Lifetime() |
||||
|
{ |
||||
|
static void Run() |
||||
|
{ |
||||
|
using var _ = UnitTestApplication.Start(TestServices.StyledWindow); |
||||
|
var window = new Window { DataContext = new ViewModelForDisposingTest() }; |
||||
|
window.Show(); |
||||
|
window.Close(); |
||||
|
} |
||||
|
|
||||
|
Run(); |
||||
|
// Process all Loaded events to free control reference(s)
|
||||
|
Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded); |
||||
|
GC.Collect(); |
||||
|
|
||||
|
dotMemory.Check(m => Assert.Equal(0, |
||||
|
m.GetObjects(o => o.Type.Is<ViewModelForDisposingTest>()).ObjectsCount)); |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue