Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,14 @@ internal class DataGridViewTextBoxEditingControlAccessibleObject : Control.Contr
/// The parent is changed when the editing control is attached to another editing cell.
/// </summary>
private AccessibleObject? _parentAccessibleObject;
private readonly TextBoxBase _owningDataGridViewTextBoxEditingControl;
private readonly TextBoxBaseUiaTextProvider _textProvider;

public DataGridViewTextBoxEditingControlAccessibleObject(DataGridViewTextBoxEditingControl ownerControl) : base(ownerControl)
{
_owningDataGridViewTextBoxEditingControl = ownerControl;
_textProvider = new TextBoxBaseUiaTextProvider(ownerControl);
UseTextProviders(_textProvider, _textProvider);
}

public override AccessibleObject? Parent => _parentAccessibleObject;
Expand Down Expand Up @@ -47,17 +52,23 @@ internal override UiaCore.IRawElementProviderFragmentRoot? FragmentRoot
{
UiaCore.UIA.ControlTypePropertyId => UiaCore.UIA.EditControlTypeId,
UiaCore.UIA.NamePropertyId => Name,
UiaCore.UIA.IsValuePatternAvailablePropertyId => true,
UiaCore.UIA.IsTextPatternAvailablePropertyId => IsPatternSupported(UiaCore.UIA.TextPatternId),
UiaCore.UIA.IsTextPattern2AvailablePropertyId => IsPatternSupported(UiaCore.UIA.TextPattern2Id),
UiaCore.UIA.IsValuePatternAvailablePropertyId => IsPatternSupported(UiaCore.UIA.ValuePatternId),
_ => base.GetPropertyValue(propertyID),
};

internal override bool IsPatternSupported(UiaCore.UIA patternId)
=> patternId switch
{
UiaCore.UIA.ValuePatternId => true,
UiaCore.UIA.TextPatternId => true,
UiaCore.UIA.TextPattern2Id => true,
_ => base.IsPatternSupported(patternId)
};

internal override bool IsReadOnly => _owningDataGridViewTextBoxEditingControl.ReadOnly;

/// <summary>
/// Sets the parent accessible object for the node which can be added or removed to/from hierachy nodes.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using Xunit;
using static System.Windows.Forms.DataGridViewTextBoxEditingControl;
using static Interop;

namespace System.Windows.Forms.Tests
{
public class DataGridViewTextBoxEditingControl_DataGridViewTextBoxEditingControlAccessibleObjectTests : IClassFixture<ThreadExceptionFixture>
{
[WinFormsFact]
public void DataGridViewTextBoxEditingControlAccessibleObject_Ctor_Default()
{
using DataGridViewTextBoxEditingControl textCellControl = new DataGridViewTextBoxEditingControl();
DataGridViewTextBoxEditingControlAccessibleObject accessibleObject = new DataGridViewTextBoxEditingControlAccessibleObject(textCellControl);
Assert.Equal(textCellControl, accessibleObject.Owner);
}

[WinFormsFact]
public void DataGridViewTextBoxEditingControlAccessibleObject_Ctor_ThrowsException_IfOwnerIsNull()
{
using DataGridViewTextBoxEditingControl textCellControl = new DataGridViewTextBoxEditingControl();
Assert.Throws<ArgumentNullException>(() => new DataGridViewTextBoxEditingControlAccessibleObject(null));
}

[WinFormsTheory]
[InlineData(true)]
[InlineData(false)]
public void ToolStripTextBoxControlAccessibleObject_IsReadOnly_IsExpected(bool readOnly)
{
using DataGridViewTextBoxEditingControl textCellControl = new DataGridViewTextBoxEditingControl();
textCellControl.ReadOnly = readOnly;
AccessibleObject accessibleObject = textCellControl.AccessibilityObject;
Assert.Equal(readOnly, accessibleObject.IsReadOnly);
}

[WinFormsTheory]
[InlineData((int)UiaCore.UIA.IsTextPatternAvailablePropertyId)]
[InlineData((int)UiaCore.UIA.IsTextPattern2AvailablePropertyId)]
[InlineData((int)UiaCore.UIA.IsValuePatternAvailablePropertyId)]
public void ToolStripTextBoxControlAccessibleObject_GetPropertyValue_PatternsSuported(int propertyID)
{
using DataGridViewTextBoxEditingControl textCellControl = new DataGridViewTextBoxEditingControl();
AccessibleObject accessibleObject = textCellControl.AccessibilityObject;
Assert.True((bool)accessibleObject.GetPropertyValue((UiaCore.UIA)propertyID));
}

[WinFormsTheory]
[InlineData((int)UiaCore.UIA.ValuePatternId)]
[InlineData((int)UiaCore.UIA.TextPatternId)]
[InlineData((int)UiaCore.UIA.TextPattern2Id)]
public void ToolStripTextBoxControlAccessibleObject_IsPatternSupported_PatternsSuported(int patternId)
{
using DataGridViewTextBoxEditingControl textCellControl = new DataGridViewTextBoxEditingControl();
AccessibleObject accessibleObject = textCellControl.AccessibilityObject;
Assert.True(accessibleObject.IsPatternSupported((UiaCore.UIA)patternId));
}
}
}