@@ -4504,162 +4504,4 @@ public void OnComponentChanging(object component, MemberDescriptor member)
45044504 }
45054505 }
45064506 }
4507-
4508- #region OnComponentRemoved Tests
4509-
4510- private static PropertyGrid CreatePropertyGridWithActiveDesigner (
4511- out Mock < IDesignerHost > mockDesignerHost ,
4512- out Mock < IComponentChangeService > mockChangeService )
4513- {
4514- PropertyGrid propertyGrid = new ( ) ;
4515- mockDesignerHost = new ( ) ;
4516- mockChangeService = new ( ) ;
4517-
4518- mockDesignerHost . Setup ( h => h . GetService ( typeof ( IComponentChangeService ) ) ) . Returns ( mockChangeService . Object ) ;
4519- propertyGrid . TestAccessor . Dynamic . ActiveDesigner = mockDesignerHost . Object ;
4520-
4521- return propertyGrid ;
4522- }
4523-
4524- [ WinFormsFact ]
4525- public void PropertyGrid_OnComponentRemoved_ThrowsWhenComponentIsNull ( )
4526- {
4527- using PropertyGrid propertyGrid = CreatePropertyGridWithActiveDesigner (
4528- out Mock < IDesignerHost > mockDesignerHost ,
4529- out Mock < IComponentChangeService > mockChangeService ) ;
4530-
4531- Assert . Throws < InvalidOperationException > ( ( ) =>
4532- mockChangeService . Raise ( s => s . ComponentRemoved += null , mockDesignerHost . Object , new ComponentEventArgs ( null ) ) ) ;
4533- }
4534-
4535- [ WinFormsFact ]
4536- public void PropertyGrid_OnComponentRemoved_RemovesComponentFromSelectedObjects ( )
4537- {
4538- using PropertyGrid propertyGrid = CreatePropertyGridWithActiveDesigner (
4539- out Mock < IDesignerHost > mockDesignerHost ,
4540- out Mock < IComponentChangeService > mockChangeService ) ;
4541-
4542- using TestComponent component1 = new ( ) ;
4543- using TestComponent component2 = new ( ) ;
4544- using TestComponent component3 = new ( ) ;
4545-
4546- propertyGrid . SelectedObjects = [ component1 , component2 , component3 ] ;
4547-
4548- mockChangeService . Raise ( s => s . ComponentRemoved += null , mockDesignerHost . Object , new ComponentEventArgs ( component2 ) ) ;
4549-
4550- Assert . Equal ( 2 , propertyGrid . SelectedObjects . Length ) ;
4551- Assert . Contains ( component1 , propertyGrid . SelectedObjects ) ;
4552- Assert . Contains ( component3 , propertyGrid . SelectedObjects ) ;
4553- Assert . DoesNotContain ( component2 , propertyGrid . SelectedObjects ) ;
4554- }
4555-
4556- [ WinFormsFact ]
4557- public void PropertyGrid_OnComponentRemoved_HandlesOnlyComponent ( )
4558- {
4559- using PropertyGrid propertyGrid = CreatePropertyGridWithActiveDesigner (
4560- out Mock < IDesignerHost > mockDesignerHost ,
4561- out Mock < IComponentChangeService > mockChangeService ) ;
4562-
4563- using TestComponent component = new ( ) ;
4564-
4565- propertyGrid . SelectedObject = component ;
4566-
4567- mockChangeService . Raise ( s => s . ComponentRemoved += null , mockDesignerHost . Object , new ComponentEventArgs ( component ) ) ;
4568-
4569- Assert . Empty ( propertyGrid . SelectedObjects ) ;
4570- }
4571-
4572- [ WinFormsFact ]
4573- public void PropertyGrid_OnComponentRemoved_BatchMode_UpdatesSelectedObjectsWithoutRefresh ( )
4574- {
4575- using PropertyGrid propertyGrid = CreatePropertyGridWithActiveDesigner (
4576- out Mock < IDesignerHost > mockDesignerHost ,
4577- out Mock < IComponentChangeService > mockChangeService ) ;
4578- mockDesignerHost . Setup ( h => h . InTransaction ) . Returns ( true ) ;
4579-
4580- using TestComponent component1 = new ( ) ;
4581- using TestComponent component2 = new ( ) ;
4582-
4583- propertyGrid . SelectedObjects = [ component1 , component2 ] ;
4584-
4585- int selectedObjectsChangedCallCount = 0 ;
4586- propertyGrid . SelectedObjectsChanged += ( sender , e ) => selectedObjectsChangedCallCount ++ ;
4587-
4588- // Enter batch mode by starting a transaction
4589- mockDesignerHost . Raise ( h => h . TransactionOpened += null , mockDesignerHost . Object , EventArgs . Empty ) ;
4590-
4591- mockChangeService . Raise ( s => s . ComponentRemoved += null , mockDesignerHost . Object , new ComponentEventArgs ( component1 ) ) ;
4592-
4593- // In batch mode, the internal selection updates immediately without invoking the refresh path.
4594- dynamic testAccessor = propertyGrid . TestAccessor . Dynamic ;
4595- object [ ] selectedObjects = testAccessor . _selectedObjects ;
4596-
4597- Assert . Single ( selectedObjects ) ;
4598- Assert . Equal ( component2 , selectedObjects [ 0 ] ) ;
4599- Assert . Single ( propertyGrid . SelectedObjects ) ;
4600- Assert . Equal ( component2 , propertyGrid . SelectedObjects [ 0 ] ) ;
4601- Assert . Equal ( 0 , selectedObjectsChangedCallCount ) ;
4602- }
4603-
4604- [ WinFormsFact ]
4605- public void PropertyGrid_OnComponentRemoved_DoesNotRemoveNonExistentComponent ( )
4606- {
4607- using PropertyGrid propertyGrid = CreatePropertyGridWithActiveDesigner (
4608- out Mock < IDesignerHost > mockDesignerHost ,
4609- out Mock < IComponentChangeService > mockChangeService ) ;
4610-
4611- using TestComponent component1 = new ( ) ;
4612- using TestComponent component2 = new ( ) ;
4613- using TestComponent component3 = new ( ) ;
4614-
4615- propertyGrid . SelectedObjects = [ component1 , component2 ] ;
4616-
4617- // Try to remove a component that is not in the selection
4618- mockChangeService . Raise ( s => s . ComponentRemoved += null , mockDesignerHost . Object , new ComponentEventArgs ( component3 ) ) ;
4619-
4620- Assert . Equal ( 2 , propertyGrid . SelectedObjects . Length ) ;
4621- Assert . Contains ( component1 , propertyGrid . SelectedObjects ) ;
4622- Assert . Contains ( component2 , propertyGrid . SelectedObjects ) ;
4623- }
4624-
4625- [ WinFormsFact ]
4626- public void PropertyGrid_OnComponentRemoved_NullSelectedObjects_DoesNotThrow ( )
4627- {
4628- using PropertyGrid propertyGrid = CreatePropertyGridWithActiveDesigner (
4629- out Mock < IDesignerHost > mockDesignerHost ,
4630- out Mock < IComponentChangeService > mockChangeService ) ;
4631-
4632- TestComponent component = new ( ) ;
4633-
4634- // Should not throw when _selectedObjects is null
4635- mockChangeService . Raise ( s => s . ComponentRemoved += null , mockDesignerHost . Object , new ComponentEventArgs ( component ) ) ;
4636-
4637- Assert . Empty ( propertyGrid . SelectedObjects ) ;
4638- }
4639-
4640- [ PropertyTab ( typeof ( DocumentScopePropertyTab ) , PropertyTabScope . Component ) ]
4641- private class TestComponent : Component , IDisposable
4642- {
4643- public string TestProperty { get ; set ; } = "Test" ;
4644- }
4645-
4646- private class DocumentScopePropertyTab : PropertyTab
4647- {
4648- private Bitmap _bitmap ;
4649- public override string TabName => "Document Tab" ;
4650- public override Bitmap Bitmap => _bitmap ??= new ( 1 , 1 ) ;
4651- public override PropertyDescriptorCollection GetProperties ( object component , Attribute [ ] attributes )
4652- => TypeDescriptor . GetProperties ( component , attributes ) ;
4653- protected override void Dispose ( bool disposing )
4654- {
4655- if ( disposing )
4656- {
4657- _bitmap ? . Dispose ( ) ;
4658- }
4659-
4660- base . Dispose ( disposing ) ;
4661- }
4662- }
4663-
4664- #endregion
46654507}
0 commit comments