From 323cfdca3a9014aa8ef2ded007c6031350477a46 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 4 Apr 2020 00:23:45 +0200 Subject: [PATCH] Make ContextMenu leak tests fail again. By adding focus/input manager. --- src/Avalonia.Controls/WindowBase.cs | 2 +- tests/Avalonia.LeakTests/ControlTests.cs | 10 +++++++++- tests/Avalonia.UnitTests/MockWindowingPlatform.cs | 4 ++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Controls/WindowBase.cs b/src/Avalonia.Controls/WindowBase.cs index 196110edf7..63eabb32f4 100644 --- a/src/Avalonia.Controls/WindowBase.cs +++ b/src/Avalonia.Controls/WindowBase.cs @@ -255,7 +255,7 @@ namespace Avalonia.Controls if (scope != null) { - FocusManager.Instance.SetFocusScope(scope); + FocusManager.Instance?.SetFocusScope(scope); } IsActive = true; diff --git a/tests/Avalonia.LeakTests/ControlTests.cs b/tests/Avalonia.LeakTests/ControlTests.cs index de3f0f8189..f93b763738 100644 --- a/tests/Avalonia.LeakTests/ControlTests.cs +++ b/tests/Avalonia.LeakTests/ControlTests.cs @@ -5,6 +5,7 @@ using System.Runtime.Remoting.Contexts; using Avalonia.Controls; using Avalonia.Controls.Templates; using Avalonia.Diagnostics; +using Avalonia.Input; using Avalonia.Layout; using Avalonia.Media; using Avalonia.Platform; @@ -441,6 +442,10 @@ namespace Avalonia.LeakTests } var window = new Window(); + window.Show(); + + Assert.Same(window, FocusManager.Instance.Current); + BuildAndShowContextMenu(window); BuildAndShowContextMenu(window); @@ -453,7 +458,10 @@ namespace Avalonia.LeakTests private IDisposable Start() { - return UnitTestApplication.Start(TestServices.StyledWindow); + return UnitTestApplication.Start(TestServices.StyledWindow.With( + focusManager: new FocusManager(), + keyboardDevice: () => new KeyboardDevice(), + inputManager: new InputManager())); } private class Node diff --git a/tests/Avalonia.UnitTests/MockWindowingPlatform.cs b/tests/Avalonia.UnitTests/MockWindowingPlatform.cs index a6701ef655..782e4a0974 100644 --- a/tests/Avalonia.UnitTests/MockWindowingPlatform.cs +++ b/tests/Avalonia.UnitTests/MockWindowingPlatform.cs @@ -21,6 +21,10 @@ namespace Avalonia.UnitTests { var win = Mock.Of(x => x.Scaling == 1); var mock = Mock.Get(win); + mock.Setup(x => x.Show()).Callback(() => + { + mock.Object.Activated?.Invoke(); + }); mock.Setup(x => x.CreatePopup()).Returns(() => { if (popupImpl != null)