diff --git a/CHANGELOG.md b/CHANGELOG.md index 3418aadacd..cea68308b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## v1.9.8 + +### Fixed +* Fix bug in `ContentControlBeforeContentUpdate` code by verifying the correct event name [#454](https://github.com/NetOfficeFw/NetOffice/pull/454) + + ## v1.9.7 ### Added diff --git a/Source/NetOffice.Tests/NetOffice.Tests.csproj b/Source/NetOffice.Tests/NetOffice.Tests.csproj index 8c93ec14b0..f9e693a995 100644 --- a/Source/NetOffice.Tests/NetOffice.Tests.csproj +++ b/Source/NetOffice.Tests/NetOffice.Tests.csproj @@ -28,6 +28,7 @@ + diff --git a/Source/NetOffice.Tests/WordApi/Events/DocumentEvents2_SinkHelperTests.cs b/Source/NetOffice.Tests/WordApi/Events/DocumentEvents2_SinkHelperTests.cs new file mode 100644 index 0000000000..6bf13cc76a --- /dev/null +++ b/Source/NetOffice.Tests/WordApi/Events/DocumentEvents2_SinkHelperTests.cs @@ -0,0 +1,45 @@ +// Copyright 2024 Cisco Systems, Inc. +// Licensed under MIT-style license (see LICENSE.txt file). + +using System; +using NetOffice.WordApi; +using NetOffice.WordApi.Events; +using NetOffice.Tests.Helpers; +using NUnit.Framework; + +namespace NetOffice.Tests.WordApi.Events +{ + [TestFixture] + public class DocumentEvents2_SinkHelperTests + { + /// + /// Regression test for #453 - Ensures ContentControlBeforeContentUpdate event uses correct event name + /// in both Validate() and EventBinding.RaiseCustomEvent() calls + /// + [Test] + public void ContentControlBeforeContentUpdate_EventRaised_CallsHandlerWithCorrectEventName() + { + // Arrange + var eventBinder = new TestableComObjectStub(); + eventBinder.AddEventRecipient(nameof(DocumentEvents2_SinkHelper.ContentControlBeforeContentUpdate)); + var connectionPoint = new ConnectionPointStub(); + + var events = new DocumentEvents2_SinkHelper(eventBinder, connectionPoint); + var parameter1 = new FakeComObject(); + var content = new object(); + + // Act + events.ContentControlBeforeContentUpdate(parameter1, ref content); + var actualParametersPassToEvent = eventBinder.LastRaisedEventParameters; + + // Assert + Assert.AreEqual("ContentControlBeforeContentUpdate", eventBinder.LastRaisedEventName, + "EventBinding.RaiseCustomEvent must be called with 'ContentControlBeforeContentUpdate' event name"); + + CollectionAssert.IsNotEmpty(actualParametersPassToEvent); + var actualParameter1 = actualParametersPassToEvent[0]; + Assert.IsInstanceOf(actualParameter1, + "Event ContentControlBeforeContentUpdate parameter must be of type ContentControl."); + } + } +} diff --git a/Source/NetOffice.Tests/packages.lock.json b/Source/NetOffice.Tests/packages.lock.json index 12724d1732..b0d202f5e6 100644 --- a/Source/NetOffice.Tests/packages.lock.json +++ b/Source/NetOffice.Tests/packages.lock.json @@ -142,6 +142,15 @@ "NetOfficeFw.Core": "[1.9.3, )", "NetOfficeFw.Office": "[1.9.3, )" } + }, + "NetOfficeFw.Word": { + "type": "Project", + "dependencies": { + "NetOfficeFw.Core": "[1.9.3, )", + "NetOfficeFw.Office": "[1.9.3, )", + "NetOfficeFw.VBIDE": "[1.9.3, )", + "stdole": "[7.0.3300, )" + } } } } diff --git a/Source/Word/Events/DocumentEvents2.cs b/Source/Word/Events/DocumentEvents2.cs index 610253fef5..4b23b6e7db 100644 --- a/Source/Word/Events/DocumentEvents2.cs +++ b/Source/Word/Events/DocumentEvents2.cs @@ -279,7 +279,7 @@ public void ContentControlBeforeStoreUpdate([In, MarshalAs(UnmanagedType.IDispat public void ContentControlBeforeContentUpdate([In, MarshalAs(UnmanagedType.IDispatch)] object contentControl, [In] [Out] ref object content) { - if (!Validate("ContentControlBeforeStoreUpdate")) + if (!Validate("ContentControlBeforeContentUpdate")) { Invoker.ReleaseParamsArray(contentControl, content); return;