From 7742c5b8bdf0877d9c4ebd4288fc11fbe1e01b11 Mon Sep 17 00:00:00 2001 From: "Zheng Li (BEYONDSOFT CONSULTING INC)" Date: Thu, 17 Jul 2025 16:12:25 +0800 Subject: [PATCH 1/5] Add code coverage for MultiPropertyDescriptorGridEntry --- .../MultiPropertyDescriptorGridEntryTests.cs | 266 ++++++++++++++++++ 1 file changed, 266 insertions(+) create mode 100644 src/test/unit/System.Windows.Forms/System/Windows/Forms/MultiPropertyDescriptorGridEntryTests.cs diff --git a/src/test/unit/System.Windows.Forms/System/Windows/Forms/MultiPropertyDescriptorGridEntryTests.cs b/src/test/unit/System.Windows.Forms/System/Windows/Forms/MultiPropertyDescriptorGridEntryTests.cs new file mode 100644 index 00000000000..b55b13bc3d8 --- /dev/null +++ b/src/test/unit/System.Windows.Forms/System/Windows/Forms/MultiPropertyDescriptorGridEntryTests.cs @@ -0,0 +1,266 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.ComponentModel; +using System.Windows.Forms.PropertyGridInternal; +using static System.Windows.Forms.PropertyGridInternal.GridEntry; + +namespace System.Windows.Forms.Tests; + +public class MultiPropertyDescriptorGridEntryTests +{ + private sealed class DummyComponent : Component { } + private sealed class TestGridEntry : GridEntry + { + public TestGridEntry(PropertyGrid ownerGrid) + : base(ownerGrid, null) + { + } + } + + private static MultiPropertyDescriptorGridEntry CreateEntryWithObjects(object[] objects, PropertyDescriptor[] descriptors) + { + PropertyGrid ownerGrid = new(); + TestGridEntry parent = new(ownerGrid); + bool hide = false; + return new MultiPropertyDescriptorGridEntry(ownerGrid, parent, objects, descriptors, hide); + } + + [Fact] + public void Container_AllObjectsAreIComponentWithSameContainer_ReturnsContainer() + { + Container container = new(); + DummyComponent dummyComponent1 = new(); + DummyComponent dummyComponent2 = new(); + container.Add(dummyComponent1); + container.Add(dummyComponent2); + + PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent1)[0], TypeDescriptor.GetProperties(dummyComponent2)[0]]; + object[] objects = [dummyComponent1, dummyComponent2]; + + MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); + + IContainer? result = multiPropertyDescriptorGridEntry.Container; + + result.Should().BeSameAs(container); + } + + [Fact] + public void Container_ObjectsAreIComponentWithDifferentContainers_ReturnsNull() + { + Container container1 = new(); + Container container2 = new(); + DummyComponent dummyComponent1 = new(); + DummyComponent dummyComponent2 = new(); + container1.Add(dummyComponent1); + container2.Add(dummyComponent2); + + PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent1)[0], TypeDescriptor.GetProperties(dummyComponent2)[0]]; + object[] objects = [dummyComponent1, dummyComponent2]; + + MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); + + IContainer? result = multiPropertyDescriptorGridEntry.Container; + + result.Should().BeNull(); + } + + [Fact] + public void Container_ObjectsAreNotIComponent_ReturnsNull() + { + object[] objects = [new object(), new object()]; + DummyComponent dummyComponent = new(); + PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent)[0], TypeDescriptor.GetProperties(dummyComponent)[0]]; + + MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); + + IContainer? result = multiPropertyDescriptorGridEntry.Container; + + result.Should().BeNull(); + } + + [Fact] + public void Container_ObjectsAreIComponent_SomeWithoutSite_ReturnsNull() + { + DummyComponent dummyComponent1 = new(); + DummyComponent dummyComponent2 = new(); + Container container = new(); + container.Add(dummyComponent1); + + PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent1)[0], TypeDescriptor.GetProperties(dummyComponent2)[0]]; + object[] objects = [dummyComponent1, dummyComponent2]; + + MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); + + IContainer? result = multiPropertyDescriptorGridEntry.Container; + + result.Should().BeNull(); + } + + [Fact] + public void Container_EmptyObjects_ReturnsNull() + { + object[] objects = []; + DummyComponent dummyComponent = new(); + PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent)[0]]; + + MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); + + IContainer? result = multiPropertyDescriptorGridEntry.Container; + + result.Should().BeNull(); + } + + [Fact] + public void Expandable_FlagExpandableAndHasChildren_ReturnsTrue() + { + DummyComponent dummyComponent1 = new(); + DummyComponent dummyComponent2 = new(); + PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent1)[0], TypeDescriptor.GetProperties(dummyComponent2)[0]]; + object[] objects = [dummyComponent1, dummyComponent2]; + MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); + + multiPropertyDescriptorGridEntry.TestAccessor().Dynamic.SetFlag(Flags.Expandable, true); + + PropertyGrid ownerGrid = new(); + multiPropertyDescriptorGridEntry.TestAccessor().Dynamic.ChildCollection.Add(new TestGridEntry(ownerGrid)); + + bool result = multiPropertyDescriptorGridEntry.Expandable; + + result.Should().BeTrue(); + } + + [Fact] + public void Expandable_ExpandableFailedFlag_ReturnsFalse() + { + DummyComponent dummyComponent1 = new(); + DummyComponent dummyComponent2 = new(); + PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent1)[0], TypeDescriptor.GetProperties(dummyComponent2)[0]]; + object[] objects = [dummyComponent1, dummyComponent2]; + MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); + + multiPropertyDescriptorGridEntry.TestAccessor().Dynamic.SetFlag(Flags.ExpandableFailed, true); + + bool result = multiPropertyDescriptorGridEntry.Expandable; + + result.Should().BeFalse(); + } + + [Fact] + public void GetComponents_ReturnsCopyOfObjects() + { + DummyComponent dummyComponent1 = new(); + DummyComponent dummyComponent2 = new(); + PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent1)[0], TypeDescriptor.GetProperties(dummyComponent2)[0]]; + object[] objects = [dummyComponent1, dummyComponent2]; + MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); + + IComponent[] result = multiPropertyDescriptorGridEntry.GetComponents(); + + result.Should().HaveCount(2); + result[0].Should().BeSameAs(dummyComponent1); + result[1].Should().BeSameAs(dummyComponent2); + } + + [Fact] + public void GetPropertyTextValue_ValueIsNullAndMergedDescriptorReturnsNull_ReturnsEmptyString() + { + DummyComponent dummyComponent1 = new(); + PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent1)[0]]; + object[] objects = [dummyComponent1]; + MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); + + string result = multiPropertyDescriptorGridEntry.GetPropertyTextValue(null); + + result.Should().Be("(none)"); + } + + [Fact] + public void SendNotification_GridEntry_CreatesTransactionAndCommits() + { + DummyComponent dummyComponent1 = new(); + PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent1)[0]]; + object[] objects = [dummyComponent1]; + MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); + + GridEntry entryParam = new TestGridEntry(new PropertyGrid()); + + bool result = multiPropertyDescriptorGridEntry.SendNotification(entryParam, Notify.Reset); + + result.Should().BeFalse(); + } + + [Fact] + public void NotifyParentsOfChanges_NotifiesParentProperties() + { + DummyComponent dummyComponent1 = new(); + PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent1)[0]]; + object[] objects = [dummyComponent1]; + MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); + + multiPropertyDescriptorGridEntry.TestAccessor().Dynamic.NotifyParentsOfChanges(multiPropertyDescriptorGridEntry); + } + + [Fact] + public void SendNotification_GridEntry_HandlesResetAndDoubleClick() + { + DummyComponent dummyComponent1 = new(); + PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent1)[0]]; + object[] objects = [dummyComponent1]; + MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); + + TestGridEntry gridEntry = new(new PropertyGrid()); + + bool resultReset = multiPropertyDescriptorGridEntry.SendNotification(gridEntry, Notify.Reset); + bool resultDoubleClick = multiPropertyDescriptorGridEntry.SendNotification(gridEntry, Notify.DoubleClick); + + resultReset.Should().BeFalse(); + resultDoubleClick.Should().BeFalse(); + } + + [Fact] + public void OwnersEqual_ComparesOwnersCorrectly() + { + object o1 = new(); + object o2 = new(); + + var accessor = typeof(MultiPropertyDescriptorGridEntry).TestAccessor(); + bool result1 = accessor.Dynamic.OwnersEqual(o1, o1); + bool result2 = accessor.Dynamic.OwnersEqual(new[] { o1, o2 }, new[] { o1, o2 }); + bool result3 = accessor.Dynamic.OwnersEqual(new[] { o1 }, new[] { o2 }); + + result1.Should().BeTrue(); + result2.Should().BeTrue(); + result3.Should().BeFalse(); + } + + [Fact] + public void OnComponentChanging_CallsChangeServiceForEachObject() + { + DummyComponent dummyComponent1 = new(); + DummyComponent dummyComponent2 = new(); + PropertyDescriptor[] descriptors = [TypeDescriptor.GetProperties(dummyComponent1)[0], TypeDescriptor.GetProperties(dummyComponent2)[0]]; + object[] objects = [dummyComponent1, dummyComponent2]; + MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, descriptors); + + bool result = multiPropertyDescriptorGridEntry.OnComponentChanging(); + + result.Should().BeTrue(); + } + + [Fact] + public void OnComponentChanged_DoesNothing_WhenServiceIsNull() + { + DummyComponent dummyComponent1 = new(); + DummyComponent dummyComponent2 = new(); + PropertyDescriptor[] propertyDescriptors = + [ + TypeDescriptor.GetProperties(dummyComponent1)[0], + TypeDescriptor.GetProperties(dummyComponent2)[0] + ]; + object[] objects = [dummyComponent1, dummyComponent2]; + MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); + + multiPropertyDescriptorGridEntry.Invoking(e => e.OnComponentChanged()).Should().NotThrow(); + } +} From fc0b432092627ea967e27ed08782cbf9dadc5c48 Mon Sep 17 00:00:00 2001 From: "Zheng Li (BEYONDSOFT CONSULTING INC)" Date: Fri, 18 Jul 2025 14:28:54 +0800 Subject: [PATCH 2/5] Address FeedBacks --- .../Windows/Forms/MultiPropertyDescriptorGridEntryTests.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/unit/System.Windows.Forms/System/Windows/Forms/MultiPropertyDescriptorGridEntryTests.cs b/src/test/unit/System.Windows.Forms/System/Windows/Forms/MultiPropertyDescriptorGridEntryTests.cs index b55b13bc3d8..8d918047db4 100644 --- a/src/test/unit/System.Windows.Forms/System/Windows/Forms/MultiPropertyDescriptorGridEntryTests.cs +++ b/src/test/unit/System.Windows.Forms/System/Windows/Forms/MultiPropertyDescriptorGridEntryTests.cs @@ -10,6 +10,7 @@ namespace System.Windows.Forms.Tests; public class MultiPropertyDescriptorGridEntryTests { private sealed class DummyComponent : Component { } + private sealed class TestGridEntry : GridEntry { public TestGridEntry(PropertyGrid ownerGrid) From d1ccf7af40dd541afbcf3a28333e4d64804cd62f Mon Sep 17 00:00:00 2001 From: "Zheng Li (BEYONDSOFT CONSULTING INC)" Date: Mon, 21 Jul 2025 09:40:08 +0800 Subject: [PATCH 3/5] Address FeedBacks --- .../MultiPropertyDescriptorGridEntryTests.cs | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/src/test/unit/System.Windows.Forms/System/Windows/Forms/MultiPropertyDescriptorGridEntryTests.cs b/src/test/unit/System.Windows.Forms/System/Windows/Forms/MultiPropertyDescriptorGridEntryTests.cs index 8d918047db4..bde97276fbc 100644 --- a/src/test/unit/System.Windows.Forms/System/Windows/Forms/MultiPropertyDescriptorGridEntryTests.cs +++ b/src/test/unit/System.Windows.Forms/System/Windows/Forms/MultiPropertyDescriptorGridEntryTests.cs @@ -21,18 +21,18 @@ public TestGridEntry(PropertyGrid ownerGrid) private static MultiPropertyDescriptorGridEntry CreateEntryWithObjects(object[] objects, PropertyDescriptor[] descriptors) { - PropertyGrid ownerGrid = new(); + using PropertyGrid ownerGrid = new(); TestGridEntry parent = new(ownerGrid); - bool hide = false; - return new MultiPropertyDescriptorGridEntry(ownerGrid, parent, objects, descriptors, hide); + + return new MultiPropertyDescriptorGridEntry(ownerGrid, parent, objects, descriptors, false); } [Fact] public void Container_AllObjectsAreIComponentWithSameContainer_ReturnsContainer() { - Container container = new(); - DummyComponent dummyComponent1 = new(); - DummyComponent dummyComponent2 = new(); + using Container container = new(); + using DummyComponent dummyComponent1 = new(); + using DummyComponent dummyComponent2 = new(); container.Add(dummyComponent1); container.Add(dummyComponent2); @@ -49,10 +49,10 @@ public void Container_AllObjectsAreIComponentWithSameContainer_ReturnsContainer( [Fact] public void Container_ObjectsAreIComponentWithDifferentContainers_ReturnsNull() { - Container container1 = new(); - Container container2 = new(); - DummyComponent dummyComponent1 = new(); - DummyComponent dummyComponent2 = new(); + using Container container1 = new(); + using Container container2 = new(); + using DummyComponent dummyComponent1 = new(); + using DummyComponent dummyComponent2 = new(); container1.Add(dummyComponent1); container2.Add(dummyComponent2); @@ -70,7 +70,7 @@ public void Container_ObjectsAreIComponentWithDifferentContainers_ReturnsNull() public void Container_ObjectsAreNotIComponent_ReturnsNull() { object[] objects = [new object(), new object()]; - DummyComponent dummyComponent = new(); + using DummyComponent dummyComponent = new(); PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent)[0], TypeDescriptor.GetProperties(dummyComponent)[0]]; MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); @@ -83,9 +83,9 @@ public void Container_ObjectsAreNotIComponent_ReturnsNull() [Fact] public void Container_ObjectsAreIComponent_SomeWithoutSite_ReturnsNull() { - DummyComponent dummyComponent1 = new(); - DummyComponent dummyComponent2 = new(); - Container container = new(); + using DummyComponent dummyComponent1 = new(); + using DummyComponent dummyComponent2 = new(); + using Container container = new(); container.Add(dummyComponent1); PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent1)[0], TypeDescriptor.GetProperties(dummyComponent2)[0]]; @@ -102,7 +102,7 @@ public void Container_ObjectsAreIComponent_SomeWithoutSite_ReturnsNull() public void Container_EmptyObjects_ReturnsNull() { object[] objects = []; - DummyComponent dummyComponent = new(); + using DummyComponent dummyComponent = new(); PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent)[0]]; MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); @@ -115,15 +115,15 @@ public void Container_EmptyObjects_ReturnsNull() [Fact] public void Expandable_FlagExpandableAndHasChildren_ReturnsTrue() { - DummyComponent dummyComponent1 = new(); - DummyComponent dummyComponent2 = new(); + using DummyComponent dummyComponent1 = new(); + using DummyComponent dummyComponent2 = new(); PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent1)[0], TypeDescriptor.GetProperties(dummyComponent2)[0]]; object[] objects = [dummyComponent1, dummyComponent2]; MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); multiPropertyDescriptorGridEntry.TestAccessor().Dynamic.SetFlag(Flags.Expandable, true); - PropertyGrid ownerGrid = new(); + using PropertyGrid ownerGrid = new(); multiPropertyDescriptorGridEntry.TestAccessor().Dynamic.ChildCollection.Add(new TestGridEntry(ownerGrid)); bool result = multiPropertyDescriptorGridEntry.Expandable; @@ -134,8 +134,8 @@ public void Expandable_FlagExpandableAndHasChildren_ReturnsTrue() [Fact] public void Expandable_ExpandableFailedFlag_ReturnsFalse() { - DummyComponent dummyComponent1 = new(); - DummyComponent dummyComponent2 = new(); + using DummyComponent dummyComponent1 = new(); + using DummyComponent dummyComponent2 = new(); PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent1)[0], TypeDescriptor.GetProperties(dummyComponent2)[0]]; object[] objects = [dummyComponent1, dummyComponent2]; MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); @@ -150,8 +150,8 @@ public void Expandable_ExpandableFailedFlag_ReturnsFalse() [Fact] public void GetComponents_ReturnsCopyOfObjects() { - DummyComponent dummyComponent1 = new(); - DummyComponent dummyComponent2 = new(); + using DummyComponent dummyComponent1 = new(); + using DummyComponent dummyComponent2 = new(); PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent1)[0], TypeDescriptor.GetProperties(dummyComponent2)[0]]; object[] objects = [dummyComponent1, dummyComponent2]; MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); @@ -166,7 +166,7 @@ public void GetComponents_ReturnsCopyOfObjects() [Fact] public void GetPropertyTextValue_ValueIsNullAndMergedDescriptorReturnsNull_ReturnsEmptyString() { - DummyComponent dummyComponent1 = new(); + using DummyComponent dummyComponent1 = new(); PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent1)[0]]; object[] objects = [dummyComponent1]; MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); @@ -179,7 +179,7 @@ public void GetPropertyTextValue_ValueIsNullAndMergedDescriptorReturnsNull_Retur [Fact] public void SendNotification_GridEntry_CreatesTransactionAndCommits() { - DummyComponent dummyComponent1 = new(); + using DummyComponent dummyComponent1 = new(); PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent1)[0]]; object[] objects = [dummyComponent1]; MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); @@ -194,7 +194,7 @@ public void SendNotification_GridEntry_CreatesTransactionAndCommits() [Fact] public void NotifyParentsOfChanges_NotifiesParentProperties() { - DummyComponent dummyComponent1 = new(); + using DummyComponent dummyComponent1 = new(); PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent1)[0]]; object[] objects = [dummyComponent1]; MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); @@ -205,7 +205,7 @@ public void NotifyParentsOfChanges_NotifiesParentProperties() [Fact] public void SendNotification_GridEntry_HandlesResetAndDoubleClick() { - DummyComponent dummyComponent1 = new(); + using DummyComponent dummyComponent1 = new(); PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent1)[0]]; object[] objects = [dummyComponent1]; MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); @@ -238,8 +238,8 @@ public void OwnersEqual_ComparesOwnersCorrectly() [Fact] public void OnComponentChanging_CallsChangeServiceForEachObject() { - DummyComponent dummyComponent1 = new(); - DummyComponent dummyComponent2 = new(); + using DummyComponent dummyComponent1 = new(); + using DummyComponent dummyComponent2 = new(); PropertyDescriptor[] descriptors = [TypeDescriptor.GetProperties(dummyComponent1)[0], TypeDescriptor.GetProperties(dummyComponent2)[0]]; object[] objects = [dummyComponent1, dummyComponent2]; MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, descriptors); @@ -252,8 +252,8 @@ public void OnComponentChanging_CallsChangeServiceForEachObject() [Fact] public void OnComponentChanged_DoesNothing_WhenServiceIsNull() { - DummyComponent dummyComponent1 = new(); - DummyComponent dummyComponent2 = new(); + using DummyComponent dummyComponent1 = new(); + using DummyComponent dummyComponent2 = new(); PropertyDescriptor[] propertyDescriptors = [ TypeDescriptor.GetProperties(dummyComponent1)[0], From 7fe9430c550e46a97c138ab5648248511b1c63e6 Mon Sep 17 00:00:00 2001 From: "Zheng Li (BEYONDSOFT CONSULTING INC)" Date: Tue, 22 Jul 2025 16:45:41 +0800 Subject: [PATCH 4/5] Address FeedBacks --- .../MultiPropertyDescriptorGridEntryTests.cs | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/test/unit/System.Windows.Forms/System/Windows/Forms/MultiPropertyDescriptorGridEntryTests.cs b/src/test/unit/System.Windows.Forms/System/Windows/Forms/MultiPropertyDescriptorGridEntryTests.cs index bde97276fbc..382c8738092 100644 --- a/src/test/unit/System.Windows.Forms/System/Windows/Forms/MultiPropertyDescriptorGridEntryTests.cs +++ b/src/test/unit/System.Windows.Forms/System/Windows/Forms/MultiPropertyDescriptorGridEntryTests.cs @@ -113,18 +113,17 @@ public void Container_EmptyObjects_ReturnsNull() } [Fact] - public void Expandable_FlagExpandableAndHasChildren_ReturnsTrue() + public void Expandable_WhenFlagExpandableAndDescriptionExist_ReturnsTrue() { - using DummyComponent dummyComponent1 = new(); - using DummyComponent dummyComponent2 = new(); - PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent1)[0], TypeDescriptor.GetProperties(dummyComponent2)[0]]; - object[] objects = [dummyComponent1, dummyComponent2]; + using Button button = new(); + PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(button)[0]]; + object[] objects = [button]; MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); multiPropertyDescriptorGridEntry.TestAccessor().Dynamic.SetFlag(Flags.Expandable, true); - using PropertyGrid ownerGrid = new(); - multiPropertyDescriptorGridEntry.TestAccessor().Dynamic.ChildCollection.Add(new TestGridEntry(ownerGrid)); + string? description = propertyDescriptors[0].Description; + description.Should().NotBeNull(); bool result = multiPropertyDescriptorGridEntry.Expandable; @@ -134,10 +133,9 @@ public void Expandable_FlagExpandableAndHasChildren_ReturnsTrue() [Fact] public void Expandable_ExpandableFailedFlag_ReturnsFalse() { - using DummyComponent dummyComponent1 = new(); - using DummyComponent dummyComponent2 = new(); - PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(dummyComponent1)[0], TypeDescriptor.GetProperties(dummyComponent2)[0]]; - object[] objects = [dummyComponent1, dummyComponent2]; + using Button button = new(); + PropertyDescriptor[] propertyDescriptors = [TypeDescriptor.GetProperties(button)[0]]; + object[] objects = [button]; MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); multiPropertyDescriptorGridEntry.TestAccessor().Dynamic.SetFlag(Flags.ExpandableFailed, true); From 3f7d7d31aa687d9c907b8acbdcf33a0ff969615d Mon Sep 17 00:00:00 2001 From: "Zheng Li (BEYONDSOFT CONSULTING INC)" Date: Thu, 24 Jul 2025 19:57:11 -0700 Subject: [PATCH 5/5] Address FeedBacks --- .../Forms/MultiPropertyDescriptorGridEntryTests.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/test/unit/System.Windows.Forms/System/Windows/Forms/MultiPropertyDescriptorGridEntryTests.cs b/src/test/unit/System.Windows.Forms/System/Windows/Forms/MultiPropertyDescriptorGridEntryTests.cs index 382c8738092..f201e45f108 100644 --- a/src/test/unit/System.Windows.Forms/System/Windows/Forms/MultiPropertyDescriptorGridEntryTests.cs +++ b/src/test/unit/System.Windows.Forms/System/Windows/Forms/MultiPropertyDescriptorGridEntryTests.cs @@ -182,7 +182,8 @@ public void SendNotification_GridEntry_CreatesTransactionAndCommits() object[] objects = [dummyComponent1]; MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); - GridEntry entryParam = new TestGridEntry(new PropertyGrid()); + using PropertyGrid propertyGrid = new(); + GridEntry entryParam = new TestGridEntry(propertyGrid); bool result = multiPropertyDescriptorGridEntry.SendNotification(entryParam, Notify.Reset); @@ -197,7 +198,12 @@ public void NotifyParentsOfChanges_NotifiesParentProperties() object[] objects = [dummyComponent1]; MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); - multiPropertyDescriptorGridEntry.TestAccessor().Dynamic.NotifyParentsOfChanges(multiPropertyDescriptorGridEntry); + Action action = () => multiPropertyDescriptorGridEntry + .TestAccessor() + .Dynamic + .NotifyParentsOfChanges(multiPropertyDescriptorGridEntry); + + action.Should().NotThrow(); } [Fact] @@ -208,7 +214,8 @@ public void SendNotification_GridEntry_HandlesResetAndDoubleClick() object[] objects = [dummyComponent1]; MultiPropertyDescriptorGridEntry multiPropertyDescriptorGridEntry = CreateEntryWithObjects(objects, propertyDescriptors); - TestGridEntry gridEntry = new(new PropertyGrid()); + using PropertyGrid propertyGrid = new(); + TestGridEntry gridEntry = new(propertyGrid); bool resultReset = multiPropertyDescriptorGridEntry.SendNotification(gridEntry, Notify.Reset); bool resultDoubleClick = multiPropertyDescriptorGridEntry.SendNotification(gridEntry, Notify.DoubleClick);