maui-linux/tests/Views/SkiaMenuBarTests.cs

367 lines
8.1 KiB
C#

// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using SkiaSharp;
using Xunit;
namespace Microsoft.Maui.Platform.Tests;
public class SkiaMenuBarTests
{
[Fact]
public void Constructor_InitializesWithDefaultValues()
{
var menuBar = new SkiaMenuBar();
Assert.Empty(menuBar.Items);
Assert.Equal(28f, menuBar.BarHeight);
Assert.Equal(13f, menuBar.FontSize);
}
[Fact]
public void Items_CanAddMenuBarItem()
{
var menuBar = new SkiaMenuBar();
var item = new MenuBarItem { Text = "File" };
menuBar.Items.Add(item);
Assert.Single(menuBar.Items);
Assert.Equal("File", menuBar.Items[0].Text);
}
[Fact]
public void MenuBarItem_CanAddMenuItems()
{
var menuBarItem = new MenuBarItem { Text = "Edit" };
menuBarItem.Items.Add(new MenuItem { Text = "Cut" });
menuBarItem.Items.Add(new MenuItem { Text = "Copy" });
menuBarItem.Items.Add(new MenuItem { Text = "Paste" });
Assert.Equal(3, menuBarItem.Items.Count);
}
[Fact]
public void MenuItem_CanHaveShortcut()
{
var item = new MenuItem { Text = "Save", Shortcut = "Ctrl+S" };
Assert.Equal("Ctrl+S", item.Shortcut);
}
[Fact]
public void MenuItem_CanBeSeparator()
{
var item = new MenuItem { IsSeparator = true };
Assert.True(item.IsSeparator);
}
[Fact]
public void MenuItem_IsEnabled_DefaultsToTrue()
{
var item = new MenuItem { Text = "Test" };
Assert.True(item.IsEnabled);
}
[Fact]
public void MenuItem_CanBeDisabled()
{
var item = new MenuItem { Text = "Test", IsEnabled = false };
Assert.False(item.IsEnabled);
}
[Fact]
public void MenuItem_CanBeChecked()
{
var item = new MenuItem { Text = "Option", IsChecked = true };
Assert.True(item.IsChecked);
}
[Fact]
public void MenuItem_CanHaveIcon()
{
var item = new MenuItem { Text = "Open", IconSource = "open.png" };
Assert.Equal("open.png", item.IconSource);
}
[Fact]
public void MenuItem_CanHaveSubItems()
{
var item = new MenuItem { Text = "Recent" };
item.SubItems.Add(new MenuItem { Text = "File1.txt" });
item.SubItems.Add(new MenuItem { Text = "File2.txt" });
Assert.Equal(2, item.SubItems.Count);
}
[Fact]
public void MenuItem_ClickedEvent_CanBeSubscribed()
{
var item = new MenuItem { Text = "Test" };
bool clicked = false;
item.Clicked += (s, e) => clicked = true;
Assert.False(clicked); // Event not raised yet
}
[Fact]
public void BarHeight_CanBeSet()
{
var menuBar = new SkiaMenuBar();
menuBar.BarHeight = 32f;
Assert.Equal(32f, menuBar.BarHeight);
}
[Fact]
public void FontSize_CanBeSet()
{
var menuBar = new SkiaMenuBar();
menuBar.FontSize = 14f;
Assert.Equal(14f, menuBar.FontSize);
}
[Fact]
public void ItemPadding_CanBeSet()
{
var menuBar = new SkiaMenuBar();
menuBar.ItemPadding = 16f;
Assert.Equal(16f, menuBar.ItemPadding);
}
[Fact]
public void BackgroundColor_CanBeSet()
{
var menuBar = new SkiaMenuBar();
menuBar.BackgroundColor = SKColors.White;
Assert.Equal(SKColors.White, menuBar.BackgroundColor);
}
[Fact]
public void TextColor_CanBeSet()
{
var menuBar = new SkiaMenuBar();
menuBar.TextColor = SKColors.Black;
Assert.Equal(SKColors.Black, menuBar.TextColor);
}
[Fact]
public void HoverBackgroundColor_CanBeSet()
{
var menuBar = new SkiaMenuBar();
menuBar.HoverBackgroundColor = SKColors.LightGray;
Assert.Equal(SKColors.LightGray, menuBar.HoverBackgroundColor);
}
[Fact]
public void ActiveBackgroundColor_CanBeSet()
{
var menuBar = new SkiaMenuBar();
menuBar.ActiveBackgroundColor = SKColors.DarkGray;
Assert.Equal(SKColors.DarkGray, menuBar.ActiveBackgroundColor);
}
[Fact]
public void Measure_ReturnsBarHeight()
{
var menuBar = new SkiaMenuBar();
menuBar.BarHeight = 30f;
var size = menuBar.Measure(new SKSize(800, 600));
Assert.Equal(30f, size.Height);
}
[Fact]
public void Measure_ReturnsAvailableWidth()
{
var menuBar = new SkiaMenuBar();
var size = menuBar.Measure(new SKSize(800, 600));
Assert.Equal(800f, size.Width);
}
[Fact]
public void HitTest_WithinBounds_ReturnsMenuBar()
{
var menuBar = new SkiaMenuBar();
menuBar.Arrange(new SKRect(0, 0, 800, 28));
var hit = menuBar.HitTest(400, 14);
Assert.Equal(menuBar, hit);
}
[Fact]
public void HitTest_OutsideBounds_ReturnsNull()
{
var menuBar = new SkiaMenuBar();
menuBar.Arrange(new SKRect(0, 0, 800, 28));
var hit = menuBar.HitTest(400, 50);
Assert.Null(hit);
}
}
public class SkiaMenuFlyoutTests
{
[Fact]
public void Constructor_InitializesWithDefaultValues()
{
var flyout = new SkiaMenuFlyout();
Assert.Empty(flyout.Items);
Assert.Equal(13f, flyout.FontSize);
Assert.Equal(28f, flyout.ItemHeight);
Assert.Equal(180f, flyout.MinWidth);
}
[Fact]
public void Items_CanBeSet()
{
var flyout = new SkiaMenuFlyout();
flyout.Items = new List<MenuItem>
{
new() { Text = "Item1" },
new() { Text = "Item2" }
};
Assert.Equal(2, flyout.Items.Count);
}
[Fact]
public void Position_CanBeSet()
{
var flyout = new SkiaMenuFlyout();
flyout.Position = new SKPoint(100, 200);
Assert.Equal(100, flyout.Position.X);
Assert.Equal(200, flyout.Position.Y);
}
[Fact]
public void BackgroundColor_CanBeSet()
{
var flyout = new SkiaMenuFlyout();
flyout.BackgroundColor = SKColors.White;
Assert.Equal(SKColors.White, flyout.BackgroundColor);
}
[Fact]
public void TextColor_CanBeSet()
{
var flyout = new SkiaMenuFlyout();
flyout.TextColor = SKColors.Black;
Assert.Equal(SKColors.Black, flyout.TextColor);
}
[Fact]
public void DisabledTextColor_CanBeSet()
{
var flyout = new SkiaMenuFlyout();
flyout.DisabledTextColor = new SKColor(160, 160, 160);
Assert.Equal(new SKColor(160, 160, 160), flyout.DisabledTextColor);
}
[Fact]
public void HoverBackgroundColor_CanBeSet()
{
var flyout = new SkiaMenuFlyout();
flyout.HoverBackgroundColor = SKColors.LightBlue;
Assert.Equal(SKColors.LightBlue, flyout.HoverBackgroundColor);
}
[Fact]
public void SeparatorColor_CanBeSet()
{
var flyout = new SkiaMenuFlyout();
flyout.SeparatorColor = SKColors.Gray;
Assert.Equal(SKColors.Gray, flyout.SeparatorColor);
}
[Fact]
public void ItemHeight_CanBeSet()
{
var flyout = new SkiaMenuFlyout();
flyout.ItemHeight = 32f;
Assert.Equal(32f, flyout.ItemHeight);
}
[Fact]
public void SeparatorHeight_CanBeSet()
{
var flyout = new SkiaMenuFlyout();
flyout.SeparatorHeight = 12f;
Assert.Equal(12f, flyout.SeparatorHeight);
}
[Fact]
public void MinWidth_CanBeSet()
{
var flyout = new SkiaMenuFlyout();
flyout.MinWidth = 200f;
Assert.Equal(200f, flyout.MinWidth);
}
[Fact]
public void ItemClickedEvent_CanBeSubscribed()
{
var flyout = new SkiaMenuFlyout();
MenuItem? clickedItem = null;
flyout.ItemClicked += (s, e) => clickedItem = e.Item;
Assert.Null(clickedItem);
}
}
public class MenuItemClickedEventArgsTests
{
[Fact]
public void Constructor_SetsItem()
{
var item = new MenuItem { Text = "Test" };
var args = new MenuItemClickedEventArgs(item);
Assert.Equal(item, args.Item);
}
}