using System; using Avalonia.Controls.Primitives.PopupPositioning; using Avalonia.Input; using Moq; using Avalonia.Platform; namespace Avalonia.UnitTests { public class MockWindowingPlatform : IWindowingPlatform { private readonly Func _windowImpl; private readonly Func _popupImpl; public MockWindowingPlatform(Func windowImpl = null, Func popupImpl = null ) { _windowImpl = windowImpl; _popupImpl = popupImpl; } public static Mock CreateWindowMock(Func popupImpl = null) { var win = Mock.Of(x => x.Scaling == 1); var mock = Mock.Get(win); mock.Setup(x => x.CreatePopup()).Returns(() => { if (popupImpl != null) return popupImpl(); return CreatePopupMock().Object; }); PixelPoint pos = default; mock.SetupGet(x => x.Position).Returns(() => pos); mock.Setup(x => x.Move(It.IsAny())).Callback(new Action(np => pos = np)); SetupToplevel(mock); return mock; } static void SetupToplevel(Mock mock) where T : class, ITopLevelImpl { mock.SetupGet(x => x.MouseDevice).Returns(new MouseDevice()); } public static Mock CreatePopupMock() { var positioner = Mock.Of(); var popup = Mock.Of(x => x.Scaling == 1); var mock = Mock.Get(popup); mock.SetupGet(x => x.PopupPositioner).Returns(positioner); SetupToplevel(mock); return mock; } public IWindowImpl CreateWindow() { return _windowImpl?.Invoke() ?? CreateWindowMock(_popupImpl).Object; } public IEmbeddableWindowImpl CreateEmbeddableWindow() { throw new NotImplementedException(); } } }