File: System\Windows\Forms\AccessibleObjects\MonthCalendar.CalendarRowAccessibleObjectTests.cs
Web Access
Project: src\src\System.Windows.Forms\tests\UnitTests\System.Windows.Forms.Tests.csproj (System.Windows.Forms.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Windows.Win32.UI.Accessibility;
using static System.Windows.Forms.MonthCalendar;
 
namespace System.Windows.Forms.Tests.AccessibleObjects;
 
public class MonthCalendar_CalendarRowAccessibleObjectTests
{
    [WinFormsFact]
    public void CalendarRowAccessibleObject_ctor_default()
    {
        using MonthCalendar control = new();
        CalendarRowAccessibleObject rowAccessibleObject = CreateCalendarRowAccessibleObject(control);
 
        int calendarIndexResult = rowAccessibleObject.TestAccessor().Dynamic._calendarIndex;
        calendarIndexResult.Should().Be(0);
 
        int rowIndexResult = rowAccessibleObject.TestAccessor().Dynamic._rowIndex;
        rowIndexResult.Should().Be(0);
 
        control.IsHandleCreated.Should().BeFalse();
        rowAccessibleObject.CanGetDescriptionInternal.Should().BeFalse();
        rowAccessibleObject.CanGetNameInternal.Should().BeFalse();
    }
 
    [WinFormsTheory]
    [InlineData(0)]
    [InlineData(1)]
    [InlineData(2)]
    [InlineData(3)]
    public void CalendarRowAccessibleObject_GetChildId_ReturnExpected(int rowIndex)
    {
        using MonthCalendar control = new();
        CalendarRowAccessibleObject rowAccessibleObject = CreateCalendarRowAccessibleObject(control, 0, rowIndex);
 
        int actual = rowAccessibleObject.GetChildId();
 
        Assert.Equal(rowIndex + 1, actual);
        Assert.False(control.IsHandleCreated);
    }
 
    [WinFormsFact]
    public void CalendarRowAccessibleObject_ControlType_IsPane()
    {
        using MonthCalendar control = new();
        CalendarRowAccessibleObject rowAccessibleObject = CreateCalendarRowAccessibleObject(control);
 
        UIA_CONTROLTYPE_ID actual = (UIA_CONTROLTYPE_ID)(int)rowAccessibleObject.GetPropertyValue(UIA_PROPERTY_ID.UIA_ControlTypePropertyId);
 
        Assert.Equal(UIA_CONTROLTYPE_ID.UIA_PaneControlTypeId, actual);
        Assert.False(control.IsHandleCreated);
    }
 
    [WinFormsFact]
    public void CalendarRowAccessibleObject_Name_IsNull()
    {
        using MonthCalendar control = new();
        CalendarRowAccessibleObject rowAccessibleObject = CreateCalendarRowAccessibleObject(control);
 
        string actual = rowAccessibleObject.Name;
 
        Assert.Null(actual);
        Assert.False(control.IsHandleCreated);
    }
 
    [WinFormsFact]
    public void CalendarRowAccessibleObject_Parent_ReturnsExpected()
    {
        using MonthCalendar control = new();
        MonthCalendarAccessibleObject controlAccessibleObject = (MonthCalendarAccessibleObject)control.AccessibilityObject;
        CalendarAccessibleObject calendarAccessibleObject = new(controlAccessibleObject, 0, "Test name");
        CalendarBodyAccessibleObject bodyAccessibleObject = new(calendarAccessibleObject, controlAccessibleObject, 0);
        CalendarRowAccessibleObject rowAccessibleObject = new(bodyAccessibleObject, controlAccessibleObject, 0, 0);
 
        AccessibleObject actual = rowAccessibleObject.Parent;
 
        Assert.Equal(bodyAccessibleObject, actual);
        Assert.False(control.IsHandleCreated);
    }
 
    [WinFormsFact]
    public void CalendarRowAccessibleObject_Role_IsRow()
    {
        using MonthCalendar control = new();
        CalendarRowAccessibleObject rowAccessibleObject = CreateCalendarRowAccessibleObject(control);
 
        AccessibleRole actual = rowAccessibleObject.Role;
 
        Assert.Equal(AccessibleRole.Row, actual);
        Assert.False(control.IsHandleCreated);
    }
 
    [WinFormsTheory]
    [InlineData(0)]
    [InlineData(1)]
    [InlineData(2)]
    [InlineData(3)]
    public void CalendarRowAccessibleObject_Row_ReturnsExpected(int rowIndex)
    {
        using MonthCalendar control = new();
        CalendarRowAccessibleObject rowAccessibleObject = CreateCalendarRowAccessibleObject(control, 0, rowIndex);
 
        int actual = rowAccessibleObject.Row;
 
        Assert.Equal(rowIndex, actual);
        Assert.False(control.IsHandleCreated);
    }
 
    [WinFormsFact]
    public void CalendarRowAccessibleObject_FragmentNavigate_Parent_ReturnsExpected()
    {
        using MonthCalendar control = new();
        var controlAccessibleObject = (MonthCalendarAccessibleObject)control.AccessibilityObject;
        CalendarAccessibleObject calendar = new(controlAccessibleObject, 0, "");
        CalendarBodyAccessibleObject body = new(calendar, controlAccessibleObject, 0);
        CalendarRowAccessibleObject row = new(body, controlAccessibleObject, 0, 2);
 
        Assert.Equal(body, row.FragmentNavigate(NavigateDirection.NavigateDirection_Parent));
        Assert.False(control.IsHandleCreated);
    }
 
    [WinFormsFact]
    public void CalendarRowAccessibleObject_FragmentNavigate_Sibling_ReturnsExpected()
    {
        using MonthCalendar control = new();
        control.CreateControl();
 
        var controlAccessibleObject = (MonthCalendarAccessibleObject)control.AccessibilityObject;
 
        CalendarAccessibleObject calendar = controlAccessibleObject.CalendarsAccessibleObjects.First?.Value;
        Assert.NotNull(calendar);
 
        CalendarBodyAccessibleObject body = calendar.CalendarBodyAccessibleObject;
        Assert.NotNull(body);
 
        CalendarRowAccessibleObject daysOfWeekRow = body.RowsAccessibleObjects?.First?.Value;
        Assert.NotNull(daysOfWeekRow);
 
        CalendarRowAccessibleObject firstWeek = body.RowsAccessibleObjects?.First?.Next?.Value;
        Assert.NotNull(firstWeek);
 
        CalendarRowAccessibleObject secondWeek = body.RowsAccessibleObjects?.First?.Next?.Next?.Value;
        Assert.NotNull(secondWeek);
 
        CalendarRowAccessibleObject thirdWeek = body.RowsAccessibleObjects?.First?.Next?.Next?.Next?.Value;
        Assert.NotNull(thirdWeek);
 
        Assert.Null(daysOfWeekRow.FragmentNavigate(NavigateDirection.NavigateDirection_PreviousSibling));
        Assert.Equal(daysOfWeekRow, firstWeek.FragmentNavigate(NavigateDirection.NavigateDirection_PreviousSibling));
        Assert.Equal(firstWeek, secondWeek.FragmentNavigate(NavigateDirection.NavigateDirection_PreviousSibling));
 
        Assert.Equal(firstWeek, daysOfWeekRow.FragmentNavigate(NavigateDirection.NavigateDirection_NextSibling));
        Assert.Equal(secondWeek, firstWeek.FragmentNavigate(NavigateDirection.NavigateDirection_NextSibling));
        Assert.Equal(thirdWeek, secondWeek.FragmentNavigate(NavigateDirection.NavigateDirection_NextSibling));
    }
 
    [WinFormsFact]
    public void CalendarRowAccessibleObject_FragmentNavigate_Child_ReturnsExpected()
    {
        using MonthCalendar control = new();
        control.CreateControl();
 
        var controlAccessibleObject = (MonthCalendarAccessibleObject)control.AccessibilityObject;
 
        CalendarAccessibleObject calendar = controlAccessibleObject.CalendarsAccessibleObjects.First?.Value;
        Assert.NotNull(calendar);
 
        CalendarBodyAccessibleObject body = calendar.CalendarBodyAccessibleObject;
        Assert.NotNull(body);
 
        CalendarRowAccessibleObject firstWeek = body.RowsAccessibleObjects?.First?.Next?.Value;
        Assert.NotNull(firstWeek);
 
        CalendarCellAccessibleObject sunday = firstWeek.CellsAccessibleObjects?.First?.Value;
        CalendarCellAccessibleObject saturday = firstWeek.CellsAccessibleObjects?.Last?.Value;
 
        Assert.Equal(sunday, firstWeek.FragmentNavigate(NavigateDirection.NavigateDirection_FirstChild));
        Assert.Equal(saturday, firstWeek.FragmentNavigate(NavigateDirection.NavigateDirection_LastChild));
    }
 
    [WinFormsFact]
    public void CalendarRowAccessibleObject_FragmentNavigate_Child_ReturnsExpected_IfWeekNumbersVisible()
    {
        using MonthCalendar control = new() { ShowWeekNumbers = true };
        control.CreateControl();
 
        var controlAccessibleObject = (MonthCalendarAccessibleObject)control.AccessibilityObject;
 
        CalendarAccessibleObject calendar = controlAccessibleObject.CalendarsAccessibleObjects.First?.Value;
        Assert.NotNull(calendar);
 
        CalendarBodyAccessibleObject body = calendar.CalendarBodyAccessibleObject;
        Assert.NotNull(body);
 
        CalendarRowAccessibleObject firstWeek = body.RowsAccessibleObjects?.First?.Next?.Value;
        Assert.NotNull(firstWeek);
 
        CalendarWeekNumberCellAccessibleObject weekNumber = firstWeek.WeekNumberCellAccessibleObject;
        CalendarCellAccessibleObject saturday = firstWeek.CellsAccessibleObjects?.Last?.Value;
 
        Assert.Equal(weekNumber, firstWeek.FragmentNavigate(NavigateDirection.NavigateDirection_FirstChild));
        Assert.Equal(saturday, firstWeek.FragmentNavigate(NavigateDirection.NavigateDirection_LastChild));
    }
 
    private CalendarRowAccessibleObject CreateCalendarRowAccessibleObject(MonthCalendar control, int calendarIndex = 0, int rowIndex = 0)
    {
        MonthCalendarAccessibleObject controlAccessibleObject = (MonthCalendarAccessibleObject)control.AccessibilityObject;
        CalendarAccessibleObject calendarAccessibleObject = new(controlAccessibleObject, calendarIndex, "Test name");
        CalendarBodyAccessibleObject bodyAccessibleObject = new(calendarAccessibleObject, controlAccessibleObject, calendarIndex);
        CalendarRowAccessibleObject rowAccessibleObject = new(bodyAccessibleObject, controlAccessibleObject, calendarIndex, rowIndex);
 
        return rowAccessibleObject;
    }
}