Просмотр исходного кода

2008-12-22 Mario Carrion <[email protected]>

        * System.Windows.Forms/Control.cs: AccessibleXXXX properties
          don't return AccessibleObject.XXXX, instead a local referece is
          returned.
        * Test/System.Windows.Forms/ControlTest.cs:
          CreatedAccessibilityTest enabled, testing handle creation and
          custom accessibility implementation.


svn path=/trunk/mcs/; revision=122002
Mario Carrion 17 лет назад
Родитель
Сommit
cfdf7c8f9b

+ 5 - 0
mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog

@@ -1,3 +1,8 @@
+2008-12-22  Mario Carrion  <[email protected]>
+
+	* Control.cs: AccessibleXXXX properties don't return 
+	AccessibleObject.XXXX, instead a local referece is returned.
+
 2008-12-22  Neville Gao  <[email protected]>
 
 	* PrintPreviewControl.cs: Added internal properties to support

+ 15 - 25
mcs/class/Managed.Windows.Forms/System.Windows.Forms/Control.cs

@@ -130,13 +130,19 @@ namespace System.Windows.Forms
 		// to be categorized...
 		ControlCollection       child_controls; // our children
 		Control                 parent; // our parent control
-		AccessibleObject        accessibility_object; // object that contains accessibility information about our control
 		BindingContext          binding_context;
 		RightToLeft             right_to_left; // drawing direction for control
 		ContextMenu             context_menu; // Context menu associated with the control
 		internal bool		use_compatible_text_rendering;
 		private bool		use_wait_cursor;
 
+		//accessibility
+		string accessible_name;
+		string accessible_description;
+		string accessible_default_action;
+		AccessibleRole accessible_role = AccessibleRole.Default;
+		AccessibleObject accessibility_object; // object that contains accessibility information about our control
+
 		// double buffering
 		DoubleBuffer            backbuffer;
 
@@ -2113,15 +2119,11 @@ namespace System.Windows.Forms
 		[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 		public string AccessibleDefaultActionDescription {
 			get {
-				if (accessibility_object != null)
-					return accessibility_object.default_action;
-				else
-					return null;
+				return accessible_default_action;
 			}
 
 			set {
-				if (accessibility_object != null)
-					AccessibilityObject.default_action = value;
+				accessible_default_action = value;
 			}
 		}
 
@@ -2130,15 +2132,11 @@ namespace System.Windows.Forms
 		[MWFCategory("Accessibility")]
 		public string AccessibleDescription {
 			get {
-				if (accessibility_object != null)
-					return accessibility_object.description;
-				else
-					return null;
+				return accessible_description;
 			}
 
 			set {
-				if (accessibility_object != null)
-					AccessibilityObject.description = value;
+				accessible_description = value;
 			}
 		}
 
@@ -2147,15 +2145,11 @@ namespace System.Windows.Forms
 		[MWFCategory("Accessibility")]
 		public string AccessibleName {
 			get {
-				if (accessibility_object != null)
-					return accessibility_object.Name;
-				else
-					return null;
+				return accessible_name;
 			}
 
 			set {
-				if (accessibility_object != null)
-					AccessibilityObject.Name = value;
+				accessible_name = value;
 			}
 		}
 
@@ -2163,15 +2157,11 @@ namespace System.Windows.Forms
 		[MWFDescription("Role of the control"), MWFCategory("Accessibility")]
 		public AccessibleRole AccessibleRole {
 			get {
-				if (accessibility_object != null)
-					return accessibility_object.role;
-				else
-					return AccessibleRole.Default;
+				return accessible_role;
 			}
 
 			set {
-				if (accessibility_object != null)
-					AccessibilityObject.role = value;
+				accessible_role = value;
 			}
 		}
 

+ 5 - 0
mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ChangeLog

@@ -1,3 +1,8 @@
+2008-12-22  Mario Carrion <[email protected]>
+
+	* ControlTest.cs: CreatedAccessibilityTest enabled, testing
+	handle creation and custom accessibility implementation.
+
 2008-12-19  Mario Carrion <[email protected]>
 
 	* ControlTest.cs: Reverted r121558: Removed 

+ 56 - 7
mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ControlTest.cs

@@ -1019,20 +1019,69 @@ namespace MonoTests.System.Windows.Forms
 			Assert.IsFalse (c.Created, "A1");
 		}
 
+		class CustomA11yEnabledControl : Control {
+			public CustomA11yEnabledControl () : base() { }
+			protected override AccessibleObject CreateAccessibilityInstance () { return new CustomAccessibleObject (this); }
+
+			class CustomAccessibleObject : ControlAccessibleObject {
+				public CustomAccessibleObject (CustomA11yEnabledControl control) : base(control) { }
+				public override string Name { get { return "custom name"; } }
+				public override string DefaultAction { get { return "custom default action"; } }
+				public override string Description { get { return "custom description"; } }
+				public override AccessibleRole Role { get { return AccessibleRole.Alert; } }
+			}
+		}
+
 		[Test]
-		[Category ("NotWorking")]
 		public void CreatedAccessibilityTest ()
 		{
-			Control c = new Control ();
-			Assert.IsFalse (c.Created, "A1");
+			CustomA11yEnabledControl c = new CustomA11yEnabledControl ();
+			Assert.IsFalse(c.Created, "A1");
 
-			Helper.TestAccessibility(c, null, null, null, AccessibleRole.Default);
+			// Tests default values
 
-			Assert.IsTrue (c.Created, "A2");
+			Assert.AreEqual (null, c.AccessibleDefaultActionDescription, "A2.0");
+			Assert.IsFalse(c.IsHandleCreated, "A2.1");
 
-			c.Dispose ();
+			Assert.AreEqual (null, c.AccessibleDescription, "A3.0");
+			Assert.IsFalse(c.IsHandleCreated, "A3.1");
+
+			Assert.AreEqual (null, c.AccessibleName, "A4.0");
+			Assert.IsFalse(c.IsHandleCreated, "A4.1");
 
-			Assert.IsFalse (c.Created, "A3");
+			Assert.AreEqual (AccessibleRole.Default, c.AccessibleRole, "A5.0");
+			Assert.IsFalse(c.IsHandleCreated, "A5.1");
+
+			object o = c.AccessibilityObject;
+			Assert.IsTrue(c.IsHandleCreated, "A6");
+
+			// Tests to confirm that:
+			// - calling Control.AccessibleXXXXX is not returning AccessibleObject.XXXXX
+			// - Handle is not Created when calling Control.AccessibleXXXXX
+			c = new CustomA11yEnabledControl ();
+
+ 			string accessibleDefaultActionDescription = "default action description";
+			c.AccessibleDefaultActionDescription = accessibleDefaultActionDescription;
+			Assert.IsFalse (c.IsHandleCreated, "A7.0");
+			Assert.AreEqual (accessibleDefaultActionDescription, c.AccessibleDefaultActionDescription, "A7.1");
+
+			string accessibleDescription = "accessible description";
+			c.AccessibleDescription = accessibleDescription;
+			Assert.IsFalse (c.IsHandleCreated, "A8.0");
+			Assert.AreEqual (accessibleDescription, c.AccessibleDescription, "A8.1");
+
+			string accessibleName = "accessible name";
+			c.AccessibleName = accessibleName;
+			Assert.IsFalse (c.IsHandleCreated, "A9.0");
+			Assert.AreEqual (accessibleName, c.AccessibleName, "A9.1");
+
+			AccessibleRole accessibleRole = AccessibleRole.Diagram;
+			c.AccessibleRole = accessibleRole;
+			Assert.AreEqual (accessibleRole, c.AccessibleRole, "A10.0");
+			Assert.IsFalse (c.IsHandleCreated, "A10.1");
+
+			c.Dispose ();
+			Assert.IsFalse (c.Created, "A11");
 		}
 
 		[Test]