A cross-platform UI framework for .NET
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

53 lines
1.5 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Media;
namespace Avalonia.Headless.UnitTests;
public class LeakTests
{
public static IEnumerable<object[]> TestData { get; } =
Enumerable.Range(0, 50).Select(i => new object[] { i.ToString() });
private static WeakReference s_previousFontManager;
#if NUNIT
[TestCaseSource(nameof(TestData))]
[AvaloniaTest, Timeout(10000)]
#elif XUNIT
[MemberData(nameof(TestData))]
[AvaloniaTheory]
#endif
public void Previous_FontManager_Should_Be_Collected(string data)
{
// Arrange
var fontManager = new WeakReference(FontManager.Current);
var button = new Button { Content = data };
var window = new Window
{
Content = button
};
// Act, just some interaction, to make sure the FontManager is actually used
window.Show();
button.Focus();
window.MouseDown(new Point(1,1), MouseButton.Left);
window.Close();
// Assert
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
// Either previous font manager is collected (IsAlive == false), or it is the same as current (shared isolation mode).
if (s_previousFontManager is not null && s_previousFontManager.Target != fontManager.Target)
{
Assert.False(s_previousFontManager.IsAlive);
}
s_previousFontManager = fontManager;
}
}