diff --git a/src/System.Windows.Forms/src/System/Windows/Forms/DataGridViewTextBoxEditingControl.DataGridViewTextBoxEditingControlAccessibleObject.cs b/src/System.Windows.Forms/src/System/Windows/Forms/DataGridViewTextBoxEditingControl.DataGridViewTextBoxEditingControlAccessibleObject.cs index c65c6f79841..a47d3f85cab 100644 --- a/src/System.Windows.Forms/src/System/Windows/Forms/DataGridViewTextBoxEditingControl.DataGridViewTextBoxEditingControlAccessibleObject.cs +++ b/src/System.Windows.Forms/src/System/Windows/Forms/DataGridViewTextBoxEditingControl.DataGridViewTextBoxEditingControlAccessibleObject.cs @@ -17,9 +17,14 @@ internal class DataGridViewTextBoxEditingControlAccessibleObject : Control.Contr /// The parent is changed when the editing control is attached to another editing cell. /// 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; @@ -47,7 +52,9 @@ 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), }; @@ -55,9 +62,13 @@ 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; + /// /// Sets the parent accessible object for the node which can be added or removed to/from hierachy nodes. /// diff --git a/src/System.Windows.Forms/tests/UnitTests/System/Windows/Forms/DataGridViewTextBoxEditingControl.DataGridViewTextBoxEditingControlAccessibleObjectTests.cs b/src/System.Windows.Forms/tests/UnitTests/System/Windows/Forms/DataGridViewTextBoxEditingControl.DataGridViewTextBoxEditingControlAccessibleObjectTests.cs new file mode 100644 index 00000000000..762334cc9be --- /dev/null +++ b/src/System.Windows.Forms/tests/UnitTests/System/Windows/Forms/DataGridViewTextBoxEditingControl.DataGridViewTextBoxEditingControlAccessibleObjectTests.cs @@ -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 + { + [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(() => 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)); + } + } +}