From c200807f5348cae872b38fe7c442cb0092783ef1 Mon Sep 17 00:00:00 2001 From: "Olina Zhang (BEYONDSOFT CONSULTING INC)" Date: Wed, 24 Sep 2025 06:28:18 +0000 Subject: [PATCH 1/3] Add unit tests for ToolStripKeyboardHandlingService.cs file --- .../ToolStripKeyboardHandlingServiceTests.cs | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 src/System.Windows.Forms.Design/tests/UnitTests/System/Windows/Forms/Design/ToolStripKeyboardHandlingServiceTests.cs diff --git a/src/System.Windows.Forms.Design/tests/UnitTests/System/Windows/Forms/Design/ToolStripKeyboardHandlingServiceTests.cs b/src/System.Windows.Forms.Design/tests/UnitTests/System/Windows/Forms/Design/ToolStripKeyboardHandlingServiceTests.cs new file mode 100644 index 00000000000..d3aff820da5 --- /dev/null +++ b/src/System.Windows.Forms.Design/tests/UnitTests/System/Windows/Forms/Design/ToolStripKeyboardHandlingServiceTests.cs @@ -0,0 +1,114 @@ +// 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.Design; +using Moq; + +namespace System.Windows.Forms.Design.Tests; + +public class ToolStripKeyboardHandlingServiceTests +{ + private readonly Mock _selectionServiceMock; + private readonly Mock _designerHostMock; + private readonly Mock _componentChangeServiceMock; + private readonly DummyServiceProvider _provider; + + public ToolStripKeyboardHandlingServiceTests() + { + _selectionServiceMock = new(); + _designerHostMock = new(); + _componentChangeServiceMock = new(); + + _provider = new(type => + type == typeof(ISelectionService) ? _selectionServiceMock.Object : + type == typeof(IDesignerHost) ? _designerHostMock.Object : + type == typeof(IComponentChangeService) ? _componentChangeServiceMock.Object : + null); + + _designerHostMock.Setup(h => h.GetService(typeof(IComponentChangeService))).Returns(_componentChangeServiceMock.Object); + } + + private class DummyServiceProvider : IServiceProvider + { + private readonly Func _serviceResolver; + + public DummyServiceProvider(Func serviceResolver) + { + _serviceResolver = serviceResolver; + } + + public object? GetService(Type serviceType) => _serviceResolver(serviceType); + } + + [Fact] + public void Ctor_InitializesAndSubscribesToEvents() + { + ToolStripKeyboardHandlingService service = new(_provider); + + _selectionServiceMock.VerifyAdd(s => s.SelectionChanging += It.IsAny(), Times.Once()); + _selectionServiceMock.VerifyAdd(s => s.SelectionChanged += It.IsAny(), Times.Once()); + _componentChangeServiceMock.VerifyAdd(s => s.ComponentRemoved += It.IsAny(), Times.Once()); + } + + [Fact] + public void AddCommands_DoesNotThrow_WhenNoMenuService() + { + ToolStripKeyboardHandlingService service = new(_provider); + service.AddCommands(); + } + + [Fact] + public void RestoreCommands_DoesNotThrow_WhenNoMenuService() + { + ToolStripKeyboardHandlingService service = new(_provider); + service.RestoreCommands(); + } + + [Fact] + public void RemoveCommands_DoesNotThrow_WhenNoMenuService() + { + ToolStripKeyboardHandlingService service = new(_provider); + service.RemoveCommands(); + } + + [Fact] + public void OnContextMenu_ReturnsTrue_WhenTemplateNodeActive() + { + ToolStripKeyboardHandlingService service = new(_provider) + { + TemplateNodeActive = true + }; + service.OnContextMenu(10, 10).Should().BeTrue(); + } + + [Fact] + public void OnContextMenu_ReturnsFalse_WhenNotTemplateNodeActive() + { + ToolStripKeyboardHandlingService service = new(_provider) + { + TemplateNodeActive = false + }; + service.OnContextMenu(10, 10).Should().BeFalse(); + } + + [Fact] + public void ProcessKeySelect_DoesNotThrow_WhenNoSelectionService() + { + ToolStripKeyboardHandlingService service = new(_provider); + service.ProcessKeySelect(false); + } + + [Fact] + public void ProcessUpDown_DoesNotThrow_WhenNoSelectionService() + { + ToolStripKeyboardHandlingService service = new(_provider); + service.ProcessUpDown(false); + } + + [Fact] + public void RotateTab_DoesNotThrow_WhenNoSelectionService() + { + ToolStripKeyboardHandlingService service = new(_provider); + service.RotateTab(false); + } +} From 2c846513fc07798ac32c622d3678b2945cb9726d Mon Sep 17 00:00:00 2001 From: "Olina Zhang (BEYONDSOFT CONSULTING INC)" Date: Sun, 28 Sep 2025 09:54:00 +0000 Subject: [PATCH 2/3] handle feedback --- .../ToolStripKeyboardHandlingServiceTests.cs | 69 +++++++++---------- 1 file changed, 32 insertions(+), 37 deletions(-) diff --git a/src/System.Windows.Forms.Design/tests/UnitTests/System/Windows/Forms/Design/ToolStripKeyboardHandlingServiceTests.cs b/src/System.Windows.Forms.Design/tests/UnitTests/System/Windows/Forms/Design/ToolStripKeyboardHandlingServiceTests.cs index d3aff820da5..e08c6840dd0 100644 --- a/src/System.Windows.Forms.Design/tests/UnitTests/System/Windows/Forms/Design/ToolStripKeyboardHandlingServiceTests.cs +++ b/src/System.Windows.Forms.Design/tests/UnitTests/System/Windows/Forms/Design/ToolStripKeyboardHandlingServiceTests.cs @@ -12,6 +12,7 @@ public class ToolStripKeyboardHandlingServiceTests private readonly Mock _designerHostMock; private readonly Mock _componentChangeServiceMock; private readonly DummyServiceProvider _provider; + private readonly ToolStripKeyboardHandlingService _service; public ToolStripKeyboardHandlingServiceTests() { @@ -20,12 +21,14 @@ public ToolStripKeyboardHandlingServiceTests() _componentChangeServiceMock = new(); _provider = new(type => - type == typeof(ISelectionService) ? _selectionServiceMock.Object : - type == typeof(IDesignerHost) ? _designerHostMock.Object : - type == typeof(IComponentChangeService) ? _componentChangeServiceMock.Object : - null); + type == typeof(ISelectionService) ? _selectionServiceMock.Object + : type == typeof(IDesignerHost) ? _designerHostMock.Object + : type == typeof(IComponentChangeService) ? _componentChangeServiceMock.Object + : null); _designerHostMock.Setup(h => h.GetService(typeof(IComponentChangeService))).Returns(_componentChangeServiceMock.Object); + + _service = new(_provider); } private class DummyServiceProvider : IServiceProvider @@ -43,72 +46,64 @@ public DummyServiceProvider(Func serviceResolver) [Fact] public void Ctor_InitializesAndSubscribesToEvents() { - ToolStripKeyboardHandlingService service = new(_provider); - _selectionServiceMock.VerifyAdd(s => s.SelectionChanging += It.IsAny(), Times.Once()); _selectionServiceMock.VerifyAdd(s => s.SelectionChanged += It.IsAny(), Times.Once()); _componentChangeServiceMock.VerifyAdd(s => s.ComponentRemoved += It.IsAny(), Times.Once()); } [Fact] - public void AddCommands_DoesNotThrow_WhenNoMenuService() - { - ToolStripKeyboardHandlingService service = new(_provider); - service.AddCommands(); - } + public void AddCommands_DoesNotThrow_WhenNoMenuService() => + ((Action)_service.AddCommands).Should().NotThrow(); [Fact] - public void RestoreCommands_DoesNotThrow_WhenNoMenuService() - { - ToolStripKeyboardHandlingService service = new(_provider); - service.RestoreCommands(); - } + public void RestoreCommands_DoesNotThrow_WhenNoMenuService() => + ((Action)_service.RestoreCommands).Should().NotThrow(); [Fact] - public void RemoveCommands_DoesNotThrow_WhenNoMenuService() - { - ToolStripKeyboardHandlingService service = new(_provider); - service.RemoveCommands(); - } + public void RemoveCommands_DoesNotThrow_WhenNoMenuService() => + ((Action)_service.RemoveCommands).Should().NotThrow(); [Fact] public void OnContextMenu_ReturnsTrue_WhenTemplateNodeActive() { - ToolStripKeyboardHandlingService service = new(_provider) - { - TemplateNodeActive = true - }; - service.OnContextMenu(10, 10).Should().BeTrue(); + _service.TemplateNodeActive = true; + + bool result = _service.OnContextMenu(10, 10); + + result.Should().BeTrue(); } [Fact] public void OnContextMenu_ReturnsFalse_WhenNotTemplateNodeActive() { - ToolStripKeyboardHandlingService service = new(_provider) - { - TemplateNodeActive = false - }; - service.OnContextMenu(10, 10).Should().BeFalse(); + _service.TemplateNodeActive = false; + + bool result = _service.OnContextMenu(10, 10); + + result.Should().BeFalse(); } [Fact] public void ProcessKeySelect_DoesNotThrow_WhenNoSelectionService() { - ToolStripKeyboardHandlingService service = new(_provider); - service.ProcessKeySelect(false); + Action action = () => _service.ProcessKeySelect(false); + + action.Should().NotThrow(); } [Fact] public void ProcessUpDown_DoesNotThrow_WhenNoSelectionService() { - ToolStripKeyboardHandlingService service = new(_provider); - service.ProcessUpDown(false); + Action action = () => _service.ProcessUpDown(false); + + action.Should().NotThrow(); } [Fact] public void RotateTab_DoesNotThrow_WhenNoSelectionService() { - ToolStripKeyboardHandlingService service = new(_provider); - service.RotateTab(false); + Action action = () => _service.RotateTab(false); + + action.Should().NotThrow(); } } From b4f1a8fa26bf8a7c5b125285388342463dfa314e Mon Sep 17 00:00:00 2001 From: v-olzhan Date: Tue, 23 Dec 2025 11:00:00 +0800 Subject: [PATCH 3/3] Update --- .../ToolStripKeyboardHandlingServiceTests.cs | 31 ++++++++++++++----- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/System.Windows.Forms.Design/tests/UnitTests/System/Windows/Forms/Design/ToolStripKeyboardHandlingServiceTests.cs b/src/System.Windows.Forms.Design/tests/UnitTests/System/Windows/Forms/Design/ToolStripKeyboardHandlingServiceTests.cs index e08c6840dd0..0c032f53ba0 100644 --- a/src/System.Windows.Forms.Design/tests/UnitTests/System/Windows/Forms/Design/ToolStripKeyboardHandlingServiceTests.cs +++ b/src/System.Windows.Forms.Design/tests/UnitTests/System/Windows/Forms/Design/ToolStripKeyboardHandlingServiceTests.cs @@ -1,6 +1,7 @@ // 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.ComponentModel.Design; using Moq; @@ -63,22 +64,36 @@ public void RestoreCommands_DoesNotThrow_WhenNoMenuService() => public void RemoveCommands_DoesNotThrow_WhenNoMenuService() => ((Action)_service.RemoveCommands).Should().NotThrow(); - [Fact] - public void OnContextMenu_ReturnsTrue_WhenTemplateNodeActive() + [Theory] + [InlineData(true)] + [InlineData(false)] + public void OnContextMenu_ReturnsExpectedResult_BasedOnTemplateNodeActive(bool isActive) { - _service.TemplateNodeActive = true; + _service.TemplateNodeActive = isActive; bool result = _service.OnContextMenu(10, 10); - result.Should().BeTrue(); + result.Should().Be(isActive); } - [Fact] - public void OnContextMenu_ReturnsFalse_WhenNotTemplateNodeActive() + [Theory] + [InlineData(typeof(ToolStripItem))] + [InlineData(typeof(Component))] + public void OnContextMenu_ReturnsFalse_WhenInvalidSelection(Type mockType) { - _service.TemplateNodeActive = false; + if (mockType == typeof(ToolStripItem)) + { + Mock toolStripItemMock = new(); + _selectionServiceMock.Setup(s => s.PrimarySelection).Returns((Component?)null); + _service.SelectedDesignerControl = toolStripItemMock.Object; + } + else + { + Mock componentMock = new(); + _selectionServiceMock.Setup(s => s.PrimarySelection).Returns(componentMock.Object); + } - bool result = _service.OnContextMenu(10, 10); + bool result = _service.OnContextMenu(100, 200); result.Should().BeFalse(); }