From 7bb6d06ac50f393c667715eb3393a36b282b78e4 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Wed, 29 Mar 2023 15:24:29 +0200 Subject: [PATCH] Added failing test for #10626 and #10718. --- .../MenuItemTests.cs | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/tests/Avalonia.Controls.UnitTests/MenuItemTests.cs b/tests/Avalonia.Controls.UnitTests/MenuItemTests.cs index 1049ff2678..909b65853c 100644 --- a/tests/Avalonia.Controls.UnitTests/MenuItemTests.cs +++ b/tests/Avalonia.Controls.UnitTests/MenuItemTests.cs @@ -3,7 +3,9 @@ using System.Collections.Generic; using System.Text; using System.Windows.Input; using Avalonia.Collections; +using Avalonia.Controls.Presenters; using Avalonia.Controls.Primitives; +using Avalonia.Controls.Templates; using Avalonia.Data; using Avalonia.Input; using Avalonia.Platform; @@ -348,6 +350,46 @@ namespace Avalonia.Controls.UnitTests } } + [Fact] + public void Menu_ItemTemplate_Should_Be_Applied_To_TopLevel_MenuItem_Header() + { + using var app = Application(); + + var items = new[] + { + new MenuViewModel("Foo"), + new MenuViewModel("Bar"), + }; + + var itemTemplate = new FuncDataTemplate((x, _) => + new TextBlock { Text = x.Header }); + + var menu = new Menu + { + ItemTemplate = itemTemplate, + ItemsSource = items, + }; + + var window = new Window { Content = menu }; + window.LayoutManager.ExecuteInitialLayoutPass(); + + var panel = Assert.IsType(menu.Presenter.Panel); + Assert.Equal(2, panel.Children.Count); + + for (var i = 0; i < panel.Children.Count; i++) + { + var menuItem = Assert.IsType(panel.Children[i]); + + Assert.Equal(items[i], menuItem.Header); + + var headerPresenter = Assert.IsType(menuItem.HeaderPresenter); + Assert.Same(itemTemplate, headerPresenter.ContentTemplate); + + var headerControl = Assert.IsType(headerPresenter.Child); + Assert.Equal(items[i].Header, headerControl.Text); + } + } + private IDisposable Application() { var screen = new PixelRect(new PixelPoint(), new PixelSize(100, 100)); @@ -401,5 +443,7 @@ namespace Avalonia.Controls.UnitTests public void RaiseCanExecuteChanged() => _canExecuteChanged?.Invoke(this, EventArgs.Empty); } + + private record MenuViewModel(string Header); } }