csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
4.9 KiB
166 lines
4.9 KiB
using System;
|
|
using Avalonia.Automation.Peers;
|
|
using Avalonia.Automation.Provider;
|
|
using Avalonia.Controls.Primitives;
|
|
using Avalonia.UnitTests;
|
|
using Xunit;
|
|
|
|
namespace Avalonia.Controls.UnitTests.Automation;
|
|
|
|
public class CalendarDayButtonAutomationPeerTests : ScopedTestBase
|
|
{
|
|
private static readonly DateTime Date1 = new(2026, 6, 5);
|
|
private static readonly DateTime Date2 = new(2026, 6, 10);
|
|
|
|
private static (Calendar, CalendarDayButton, ISelectionItemProvider) CreateTarget(
|
|
CalendarSelectionMode mode, DateTime? date = null)
|
|
{
|
|
var calendar = new Calendar { SelectionMode = mode };
|
|
var dayButton = new CalendarDayButton { Owner = calendar, DataContext = date ?? Date1 };
|
|
var peer = ControlAutomationPeer.CreatePeerForElement(dayButton);
|
|
return (calendar, dayButton, Assert.IsAssignableFrom<ISelectionItemProvider>(peer));
|
|
}
|
|
|
|
[Fact]
|
|
public void Creates_CalendarDayButtonAutomationPeer()
|
|
{
|
|
var peer = ControlAutomationPeer.CreatePeerForElement(new CalendarDayButton());
|
|
|
|
Assert.IsType<CalendarDayButtonAutomationPeer>(peer);
|
|
Assert.IsAssignableFrom<ISelectionItemProvider>(peer);
|
|
Assert.IsAssignableFrom<IInvokeProvider>(peer);
|
|
}
|
|
|
|
[Fact]
|
|
public void IsSelected_Reflects_Owner_State()
|
|
{
|
|
var (_, dayButton, provider) = CreateTarget(CalendarSelectionMode.SingleDate);
|
|
|
|
Assert.False(provider.IsSelected);
|
|
dayButton.IsSelected = true;
|
|
Assert.True(provider.IsSelected);
|
|
}
|
|
|
|
[Fact]
|
|
public void SelectionContainer_Is_Calendar_Peer()
|
|
{
|
|
var (calendar, _, provider) = CreateTarget(CalendarSelectionMode.SingleDate);
|
|
|
|
var container = provider.SelectionContainer;
|
|
|
|
Assert.NotNull(container);
|
|
Assert.Same(ControlAutomationPeer.CreatePeerForElement(calendar), container);
|
|
}
|
|
|
|
[Fact]
|
|
public void Select_Sets_SelectedDate()
|
|
{
|
|
var (calendar, _, provider) = CreateTarget(CalendarSelectionMode.SingleDate);
|
|
|
|
provider.Select();
|
|
|
|
Assert.Equal(Date1, calendar.SelectedDate);
|
|
}
|
|
|
|
[Fact]
|
|
public void Select_Replaces_Existing_Selection_In_SingleDate_Mode()
|
|
{
|
|
var (calendar, _, provider) = CreateTarget(CalendarSelectionMode.SingleDate);
|
|
calendar.SelectedDate = Date2;
|
|
|
|
provider.Select();
|
|
|
|
Assert.Equal(Date1, calendar.SelectedDate);
|
|
Assert.Equal(1, calendar.SelectedDates.Count);
|
|
}
|
|
|
|
[Fact]
|
|
public void Select_Is_NoOp_When_SelectionMode_None()
|
|
{
|
|
var (calendar, _, provider) = CreateTarget(CalendarSelectionMode.None);
|
|
|
|
provider.Select();
|
|
|
|
Assert.Null(calendar.SelectedDate);
|
|
Assert.Empty(calendar.SelectedDates);
|
|
}
|
|
|
|
[Fact]
|
|
public void Select_Is_NoOp_For_Blackout_Day()
|
|
{
|
|
var (calendar, dayButton, provider) = CreateTarget(CalendarSelectionMode.SingleDate);
|
|
dayButton.IsBlackout = true;
|
|
|
|
provider.Select();
|
|
|
|
Assert.Null(calendar.SelectedDate);
|
|
}
|
|
|
|
[Fact]
|
|
public void AddToSelection_Replaces_Selection_In_SingleDate_Mode()
|
|
{
|
|
var (calendar, _, provider) = CreateTarget(CalendarSelectionMode.SingleDate);
|
|
calendar.SelectedDate = Date2;
|
|
|
|
provider.AddToSelection();
|
|
|
|
Assert.Equal(Date1, calendar.SelectedDate);
|
|
Assert.Equal(1, calendar.SelectedDates.Count);
|
|
}
|
|
|
|
[Fact]
|
|
public void AddToSelection_Appends_In_MultipleRange_Mode()
|
|
{
|
|
var (calendar, _, provider) = CreateTarget(CalendarSelectionMode.MultipleRange);
|
|
calendar.SelectedDates.Add(Date2);
|
|
|
|
provider.AddToSelection();
|
|
|
|
Assert.Equal(2, calendar.SelectedDates.Count);
|
|
Assert.Contains(Date1, calendar.SelectedDates);
|
|
Assert.Contains(Date2, calendar.SelectedDates);
|
|
}
|
|
|
|
[Fact]
|
|
public void AddToSelection_Is_NoOp_When_SelectionMode_None()
|
|
{
|
|
var (calendar, _, provider) = CreateTarget(CalendarSelectionMode.None);
|
|
|
|
provider.AddToSelection();
|
|
|
|
Assert.Empty(calendar.SelectedDates);
|
|
}
|
|
|
|
[Fact]
|
|
public void AddToSelection_Is_NoOp_For_Blackout_Day()
|
|
{
|
|
var (calendar, dayButton, provider) = CreateTarget(CalendarSelectionMode.MultipleRange);
|
|
dayButton.IsBlackout = true;
|
|
|
|
provider.AddToSelection();
|
|
|
|
Assert.Empty(calendar.SelectedDates);
|
|
}
|
|
|
|
[Fact]
|
|
public void RemoveFromSelection_Removes_Date()
|
|
{
|
|
var (calendar, _, provider) = CreateTarget(CalendarSelectionMode.MultipleRange);
|
|
calendar.SelectedDates.Add(Date1);
|
|
calendar.SelectedDates.Add(Date2);
|
|
|
|
provider.RemoveFromSelection();
|
|
|
|
Assert.Equal(Date2, Assert.Single(calendar.SelectedDates));
|
|
}
|
|
|
|
[Fact]
|
|
public void RemoveFromSelection_Is_NoOp_When_SelectionMode_None()
|
|
{
|
|
var (calendar, _, provider) = CreateTarget(CalendarSelectionMode.None);
|
|
|
|
provider.RemoveFromSelection();
|
|
|
|
Assert.Empty(calendar.SelectedDates);
|
|
}
|
|
}
|
|
|