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));
+ }
+ }
}