From eb7fe0f40038f7ccc0f954338ae25d4fdcf3b872 Mon Sep 17 00:00:00 2001
From: Martin Zikmund <martin@zikmund.dev>
Date: Tue, 16 Jan 2024 17:42:54 +0100
Subject: [PATCH] test: Validate MenuFlyout toggle items

---
 .../Given_MenuFlyout.cs                       | 40 +++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/src/Uno.UI.RuntimeTests/Tests/Windows_UI_Xaml_Controls/Given_MenuFlyout.cs b/src/Uno.UI.RuntimeTests/Tests/Windows_UI_Xaml_Controls/Given_MenuFlyout.cs
index 57f07379b8d9..db871305f460 100644
--- a/src/Uno.UI.RuntimeTests/Tests/Windows_UI_Xaml_Controls/Given_MenuFlyout.cs
+++ b/src/Uno.UI.RuntimeTests/Tests/Windows_UI_Xaml_Controls/Given_MenuFlyout.cs
@@ -422,5 +422,45 @@ public async Task When_MenuFlyout_DataContext_Changes_In_Opening()
 				}
 			}
 		}
+
+		[TestMethod]
+		public async Task When_Toggle_Item_HasToggle()
+		{
+			var toggleItem = new ToggleMenuFlyoutItem();
+			Assert.IsTrue(toggleItem.HasToggle());
+		}
+
+		[TestMethod]
+		public async Task When_Menu_Contains_Toggle()
+		{
+			var menu = new MenuFlyout();
+			menu.Items.Add(new MenuFlyoutItem() { Text = "Text" });
+
+			var trigger = new Button();
+			TestServices.WindowHelper.WindowContent = trigger;
+			await TestServices.WindowHelper.WaitForLoaded(trigger);
+
+			await ValidateToggleAsync(false);
+
+			var toggleItem = new ToggleMenuFlyoutItem() { Text = "Toggle!" };
+			menu.Items.Add(toggleItem);
+			await ValidateToggleAsync(true);
+
+			menu.Items.Remove(toggleItem);
+			await ValidateToggleAsync(false);
+
+			async Task ValidateToggleAsync(bool expected)
+			{
+				menu.ShowAt(trigger);
+				await TestServices.WindowHelper.WaitForIdle();
+				var popups = VisualTreeHelper.GetOpenPopupsForXamlRoot(TestServices.WindowHelper.XamlRoot);
+				var popup = popups[0];
+				Assert.IsInstanceOfType(popup.Child, typeof(MenuFlyoutPresenter));
+				var presenter = (MenuFlyoutPresenter)popup.Child;
+				Assert.AreEqual(expected, presenter.GetContainsToggleItems());
+				popup.IsOpen = false;
+				await TestServices.WindowHelper.WaitForIdle();
+			}
+		}
 	}
 }