|
|
|
@ -583,6 +583,48 @@ namespace Avalonia.LeakTests |
|
|
|
Assert.Equal(initialMenuItemCount, memory.GetObjects(where => where.Type.Is<MenuItem>()).ObjectsCount)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Attached_Control_From_ContextMenu_Is_Freed() |
|
|
|
{ |
|
|
|
using (Start()) |
|
|
|
{ |
|
|
|
var contextMenu = new ContextMenu(); |
|
|
|
Func<Window> run = () => |
|
|
|
{ |
|
|
|
var window = new Window |
|
|
|
{ |
|
|
|
Content = new TextBlock |
|
|
|
{ |
|
|
|
ContextMenu = contextMenu |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
window.Show(); |
|
|
|
|
|
|
|
// Do a layout and make sure that TextBlock gets added to visual tree with
|
|
|
|
// its render transform.
|
|
|
|
window.LayoutManager.ExecuteInitialLayoutPass(); |
|
|
|
var textBlock = Assert.IsType<TextBlock>(window.Presenter.Child); |
|
|
|
Assert.IsType<RotateTransform>(textBlock.RenderTransform); |
|
|
|
|
|
|
|
// Clear the content and ensure the TextBlock is removed.
|
|
|
|
window.Content = null; |
|
|
|
window.LayoutManager.ExecuteLayoutPass(); |
|
|
|
Assert.Null(window.Presenter.Child); |
|
|
|
|
|
|
|
return window; |
|
|
|
}; |
|
|
|
|
|
|
|
var result = run(); |
|
|
|
|
|
|
|
// Process all Loaded events to free control reference(s)
|
|
|
|
Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded); |
|
|
|
|
|
|
|
dotMemory.Check(memory => |
|
|
|
Assert.Equal(0, memory.GetObjects(where => where.Type.Is<TextBlock>()).ObjectsCount)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Standalone_ContextMenu_Is_Freed() |
|
|
|
|