diff --git a/Stack/Opc.Ua.Core/Stack/State/BaseEventState.cs b/Stack/Opc.Ua.Core/Stack/State/BaseEventState.cs index 9cbf864376..547797d749 100644 --- a/Stack/Opc.Ua.Core/Stack/State/BaseEventState.cs +++ b/Stack/Opc.Ua.Core/Stack/State/BaseEventState.cs @@ -83,7 +83,7 @@ namespace Opc.Ua /// public new object MemberwiseClone() { - var clone = (BaseEventState)Activator.CreateInstance(GetType()); + var clone = (BaseEventState)Activator.CreateInstance(GetType(), Parent); return CloneChildren(clone); } } diff --git a/Tests/Opc.Ua.Core.Tests/Stack/State/NodeStateTests.cs b/Tests/Opc.Ua.Core.Tests/Stack/State/NodeStateTests.cs index e0e46b5dee..24b5722c40 100644 --- a/Tests/Opc.Ua.Core.Tests/Stack/State/NodeStateTests.cs +++ b/Tests/Opc.Ua.Core.Tests/Stack/State/NodeStateTests.cs @@ -139,4 +139,59 @@ namespace Opc.Ua.Core.Tests.Stack.State return CreateDefaultNodeStateType(systemType) is NodeState; } } + + /// + /// Tests for BaseEventState.MemberwiseClone. + /// + [TestFixture] + [Category("BaseEventState")] + [SetCulture("en-us")] + [SetUICulture("en-us")] + [Parallelizable] + public class BaseEventStateTests + { + /// + /// Verify that MemberwiseClone works correctly for BaseEventState. + /// + [Test] + public void MemberwiseCloneBaseEventStateSucceeds() + { + var parent = new BaseObjectState(null); + var eventState = new BaseEventState(parent); + + var clone = (BaseEventState)eventState.MemberwiseClone(); + + Assert.That(clone, Is.Not.Null); + Assert.That(clone.Parent, Is.SameAs(parent)); + } + + /// + /// Verify that MemberwiseClone works correctly for BaseEventState with null parent. + /// + [Test] + public void MemberwiseCloneBaseEventStateWithNullParentSucceeds() + { + var eventState = new BaseEventState(null); + + var clone = (BaseEventState)eventState.MemberwiseClone(); + + Assert.That(clone, Is.Not.Null); + Assert.That(clone.Parent, Is.Null); + } + + /// + /// Verify that Clone works correctly for derived event types. + /// + [Test] + public void CloneNonExclusiveLimitAlarmStateSucceeds() + { + var parent = new BaseObjectState(null); + var alarmState = new NonExclusiveLimitAlarmState(parent); + + var clone = (NonExclusiveLimitAlarmState)alarmState.Clone(); + + Assert.That(clone, Is.Not.Null); + Assert.That(clone.Parent, Is.SameAs(parent)); + } + } }