File: System\Windows\Forms\AccessibleObjects\DataGridViewRowHeaderCellAccessibleObjectTests.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 System.Drawing;
using Windows.Win32.UI.Accessibility;
 
namespace System.Windows.Forms.Tests.AccessibleObjects;
 
public class DataGridViewRowHeaderCellAccessibleObjectTests : DataGridViewRowHeaderCell
{
    [WinFormsFact]
    public void DataGridViewRowHeaderCellAccessibleObject_Ctor_Default()
    {
        DataGridViewRowHeaderCellAccessibleObject accessibleObject = new(null);
        Assert.Null(accessibleObject.Owner);
    }
 
    [WinFormsFact]
    public void DataGridViewRowHeaderCellAccessibleObject_Parent_ThrowException_IfOwnerIsNull()
    {
        Assert.Throws<InvalidOperationException>(() => new DataGridViewRowHeaderCellAccessibleObject(null).Parent);
    }
 
    [WinFormsFact]
    public void DataGridViewRowHeaderCellAccessibleObject_Parent_ReturnsExpected()
    {
        using DataGridView control = new();
        control.Columns.Add("Column 1", "Header text 1");
        DataGridViewRowHeaderCell cell = control.Rows[0].HeaderCell;
 
        var accessibleObject = (DataGridViewRowHeaderCellAccessibleObject)cell.AccessibilityObject;
 
        Assert.Equal(cell.OwningRow.AccessibilityObject, accessibleObject.Parent);
        Assert.False(control.IsHandleCreated);
    }
 
    [WinFormsFact]
    public void DataGridViewRowHeaderCellAccessibleObject_Value_ReturnsExpected()
    {
        DataGridViewRowHeaderCellAccessibleObject accessibleObject = new(null);
        Assert.Equal(string.Empty, accessibleObject.Value);
    }
 
    [WinFormsFact]
    public void DataGridViewRowHeaderCellAccessibleObject_Role_ReturnsExpected()
    {
        DataGridViewRowHeaderCellAccessibleObject accessibleObject = new(null);
        Assert.Equal(AccessibleRole.RowHeader, accessibleObject.Role);
    }
 
    [WinFormsFact]
    public void DataGridViewRowHeaderCellAccessibleObject_Name_ReturnsExpected()
    {
        using DataGridView control = new();
        control.Columns.Add("Column 1", "Header text 1");
        DataGridViewRow row = control.Rows[0];
 
        Assert.Equal(row.AccessibilityObject.Name, row.HeaderCell.AccessibilityObject.Name);
        Assert.False(control.IsHandleCreated);
    }
 
    public static IEnumerable<object[]> DataGridViewRowHeaderCellAccessibleObject_DefaultAction_TestData()
    {
        yield return new object[] { DataGridViewSelectionMode.FullRowSelect, SR.DataGridView_RowHeaderCellAccDefaultAction };
        yield return new object[] { DataGridViewSelectionMode.RowHeaderSelect, SR.DataGridView_RowHeaderCellAccDefaultAction };
        yield return new object[] { DataGridViewSelectionMode.CellSelect, string.Empty };
    }
 
    [WinFormsTheory]
    [MemberData(nameof(DataGridViewRowHeaderCellAccessibleObject_DefaultAction_TestData))]
    public void DataGridViewRowHeaderCellAccessibleObject_DefaultAction_ReturnsExpected(DataGridViewSelectionMode mode, string expected)
    {
        using DataGridView control = new();
        control.SelectionMode = mode;
        control.Columns.Add("Column 1", "Header text 1");
 
        var accessibleObject = (DataGridViewRowHeaderCellAccessibleObject)control.Rows[0].HeaderCell.AccessibilityObject;
 
        Assert.Equal(expected, accessibleObject.DefaultAction);
        Assert.False(control.IsHandleCreated);
    }
 
    [WinFormsTheory]
    [InlineData(DataGridViewSelectionMode.FullRowSelect, true)]
    [InlineData(DataGridViewSelectionMode.RowHeaderSelect, true)]
    [InlineData(DataGridViewSelectionMode.CellSelect, false)]
    public void DataGridViewRowHeaderCellAccessibleObject_DoDefaultAction_WorksExpected(DataGridViewSelectionMode mode, bool expected)
    {
        using DataGridView control = new();
        control.SelectionMode = mode;
        control.Columns.Add("Column 1", "Header text 1");
        DataGridViewRowHeaderCell cell = control.Rows[0].HeaderCell;
        control.CreateControl();
 
        Assert.False(cell.OwningRow.Selected);
 
        cell.AccessibilityObject.DoDefaultAction();
 
        Assert.Equal(expected, cell.OwningRow.Selected);
        Assert.True(control.IsHandleCreated);
    }
 
    [WinFormsTheory]
    [InlineData(DataGridViewSelectionMode.FullRowSelect)]
    [InlineData(DataGridViewSelectionMode.RowHeaderSelect)]
    [InlineData(DataGridViewSelectionMode.CellSelect)]
    public void DataGridViewRowHeaderCellAccessibleObject_DoDefaultAction_DoesNothing_IfHandleIsNotCreated(DataGridViewSelectionMode mode)
    {
        using DataGridView control = new();
        control.SelectionMode = mode;
        control.Columns.Add("Column 1", "Header text 1");
        DataGridViewRowHeaderCell cell = control.Rows[0].HeaderCell;
 
        Assert.False(cell.OwningRow.Selected);
 
        cell.AccessibilityObject.DoDefaultAction();
 
        Assert.False(cell.OwningRow.Selected);
        Assert.False(control.IsHandleCreated);
    }
 
    [WinFormsFact]
    public void DataGridViewRowHeaderCellAccessibleObject_Bounds_IsNotEmptyRectangle()
    {
        using DataGridView control = new();
        control.Columns.Add("Column 1", "Header text 1");
 
        var accessibleObject = (DataGridViewRowHeaderCellAccessibleObject)control.Rows[0].HeaderCell.AccessibilityObject;
 
        Assert.NotEqual(Rectangle.Empty, accessibleObject.Bounds);
        Assert.False(control.IsHandleCreated);
    }
 
    [WinFormsTheory]
    [InlineData(true)]
    [InlineData(false)]
    public void DataGridViewRowHeaderCellAccessibleObject_FragmentNavigate_Parent_ReturnsExpected(bool createControl)
    {
        using DataGridView control = CreateDataGridView(columnCount: 1, createControl);
        DataGridViewRow row = control.Rows[0];
 
        var accessibleObject = (DataGridViewRowHeaderCellAccessibleObject)row.HeaderCell.AccessibilityObject;
        AccessibleObject expected = row.AccessibilityObject;
 
        Assert.Equal(expected, accessibleObject.FragmentNavigate(NavigateDirection.NavigateDirection_Parent));
 
        Assert.Equal(createControl, control.IsHandleCreated);
    }
 
    [WinFormsFact]
    public void DataGridViewRowHeaderCellAccessibleObject_FragmentNavigate_Parent_ReturnsNull_IfOwningRowIsNull()
    {
        DataGridViewRowHeaderCellAccessibleObject accessibleObject = new(new());
 
        Assert.Null(accessibleObject.Owner.OwningRow);
        Assert.Null(accessibleObject.FragmentNavigate(NavigateDirection.NavigateDirection_Parent));
    }
 
    [WinFormsTheory]
    [InlineData(true)]
    [InlineData(false)]
    public void DataGridViewRowHeaderCellAccessibleObject_FragmentNavigate_NextSibling_ReturnsExpected(bool createControl)
    {
        using DataGridView control = CreateDataGridView(columnCount: 1, createControl);
        DataGridViewRow row = control.Rows[0];
 
        AccessibleObject accessibleObject = (DataGridViewRowHeaderCellAccessibleObject)row.HeaderCell.AccessibilityObject;
        AccessibleObject expected = row.Cells[0].AccessibilityObject;
 
        Assert.Equal(expected, accessibleObject.FragmentNavigate(NavigateDirection.NavigateDirection_NextSibling));
 
        Assert.Equal(createControl, control.IsHandleCreated);
    }
 
    [WinFormsTheory]
    [InlineData(true)]
    [InlineData(false)]
    public void DataGridViewRowHeaderCellAccessibleObject_FragmentNavigate_NextSibling_ReturnsExpected_IfFirstColumnHidden(bool createControl)
    {
        using DataGridView control = CreateDataGridView(columnCount: 2, createControl);
        control.Columns[0].Visible = false;
        DataGridViewRow row = control.Rows[0];
 
        AccessibleObject accessibleObject = (DataGridViewRowHeaderCellAccessibleObject)row.HeaderCell.AccessibilityObject;
        AccessibleObject expected = row.Cells[1].AccessibilityObject;
 
        Assert.Equal(expected, accessibleObject.FragmentNavigate(NavigateDirection.NavigateDirection_NextSibling));
 
        Assert.Equal(createControl, control.IsHandleCreated);
    }
 
    [WinFormsTheory]
    [InlineData(true)]
    [InlineData(false)]
    public void DataGridViewRowHeaderCellAccessibleObject_FragmentNavigate_NextSibling_ReturnsExpected_IfCustomOrder(bool createControl)
    {
        using DataGridView control = CreateDataGridView(columnCount: 2, createControl);
        control.Columns[0].DisplayIndex = 1;
        control.Columns[1].DisplayIndex = 0;
        DataGridViewRow row = control.Rows[0];
 
        AccessibleObject accessibleObject = (DataGridViewRowHeaderCellAccessibleObject)row.HeaderCell.AccessibilityObject;
        AccessibleObject expected = row.Cells[1].AccessibilityObject;
 
        Assert.Equal(expected, accessibleObject.FragmentNavigate(NavigateDirection.NavigateDirection_NextSibling));
 
        Assert.Equal(createControl, control.IsHandleCreated);
    }
 
    [WinFormsTheory]
    [InlineData(true)]
    [InlineData(false)]
    public void DataGridViewRowHeaderCellAccessibleObject_FragmentNavigate_NextSibling_ReturnsExpected_IfCustomOrderAndFirstDisplayedColumnHidden(bool createControl)
    {
        using DataGridView control = CreateDataGridView(columnCount: 2, createControl);
        control.Columns[0].DisplayIndex = 1;
        control.Columns[1].DisplayIndex = 0;
        control.Columns[1].Visible = false;
        DataGridViewRow row = control.Rows[0];
 
        AccessibleObject accessibleObject = (DataGridViewRowHeaderCellAccessibleObject)row.HeaderCell.AccessibilityObject;
        AccessibleObject expected = row.Cells[0].AccessibilityObject;
 
        Assert.Equal(expected, accessibleObject.FragmentNavigate(NavigateDirection.NavigateDirection_NextSibling));
 
        Assert.Equal(createControl, control.IsHandleCreated);
    }
 
    [WinFormsTheory]
    [InlineData(true)]
    [InlineData(false)]
    public void DataGridViewRowHeaderCellAccessibleObject_FragmentNavigate_PreviousSibling_ReturnsExpected(bool createControl)
    {
        using DataGridView control = CreateDataGridView(columnCount: 1, createControl);
        DataGridViewRow row = control.Rows[0];
 
        var accessibleObject = (DataGridViewRowHeaderCellAccessibleObject)row.HeaderCell.AccessibilityObject;
 
        Assert.Null(accessibleObject.FragmentNavigate(NavigateDirection.NavigateDirection_PreviousSibling));
 
        Assert.Equal(createControl, control.IsHandleCreated);
    }
 
    [WinFormsTheory]
    [InlineData(true)]
    [InlineData(false)]
    public void DataGridViewRowHeaderCellAccessibleObject_FragmentNavigate_Child_ReturnsNull(bool createControl)
    {
        using DataGridView control = CreateDataGridView(columnCount: 1, createControl);
        DataGridViewRow row = control.Rows[0];
 
        var accessibleObject = (DataGridViewRowHeaderCellAccessibleObject)row.HeaderCell.AccessibilityObject;
 
        Assert.Null(accessibleObject.FragmentNavigate(NavigateDirection.NavigateDirection_FirstChild));
        Assert.Null(accessibleObject.FragmentNavigate(NavigateDirection.NavigateDirection_LastChild));
 
        Assert.Equal(createControl, control.IsHandleCreated);
    }
 
    private DataGridView CreateDataGridView(int columnCount, bool createControl)
    {
        DataGridView dataGridView = new();
 
        for (int i = 0; i < columnCount; i++)
        {
            dataGridView.Columns.Add(new DataGridViewTextBoxColumn());
        }
 
        if (createControl)
        {
            dataGridView.CreateControl();
        }
 
        return dataGridView;
    }
}