Skip to content

Commit b8ed3cc

Browse files
Copilotromanett
andauthored
Fix BaseEventState.MemberwiseClone() to pass Parent to Activator.CreateInstance (#3361)
* Fix BaseEventState.MemberwiseClone() to pass Parent to Activator.CreateInstance Co-authored-by: romanett <[email protected]> --------- Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: romanett <[email protected]>
1 parent 30f4fa2 commit b8ed3cc

File tree

2 files changed

+56
-1
lines changed

2 files changed

+56
-1
lines changed

Stack/Opc.Ua.Core/Stack/State/BaseEventState.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public override object Clone()
8383
/// </returns>
8484
public new object MemberwiseClone()
8585
{
86-
var clone = (BaseEventState)Activator.CreateInstance(GetType());
86+
var clone = (BaseEventState)Activator.CreateInstance(GetType(), Parent);
8787
return CloneChildren(clone);
8888
}
8989
}

Tests/Opc.Ua.Core.Tests/Stack/State/NodeStateTests.cs

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,4 +139,59 @@ private static bool IsNodeStateType(Type systemType)
139139
return CreateDefaultNodeStateType(systemType) is NodeState;
140140
}
141141
}
142+
143+
/// <summary>
144+
/// Tests for BaseEventState.MemberwiseClone.
145+
/// </summary>
146+
[TestFixture]
147+
[Category("BaseEventState")]
148+
[SetCulture("en-us")]
149+
[SetUICulture("en-us")]
150+
[Parallelizable]
151+
public class BaseEventStateTests
152+
{
153+
/// <summary>
154+
/// Verify that MemberwiseClone works correctly for BaseEventState.
155+
/// </summary>
156+
[Test]
157+
public void MemberwiseCloneBaseEventStateSucceeds()
158+
{
159+
var parent = new BaseObjectState(null);
160+
var eventState = new BaseEventState(parent);
161+
162+
var clone = (BaseEventState)eventState.MemberwiseClone();
163+
164+
Assert.That(clone, Is.Not.Null);
165+
Assert.That(clone.Parent, Is.SameAs(parent));
166+
}
167+
168+
/// <summary>
169+
/// Verify that MemberwiseClone works correctly for BaseEventState with null parent.
170+
/// </summary>
171+
[Test]
172+
public void MemberwiseCloneBaseEventStateWithNullParentSucceeds()
173+
{
174+
var eventState = new BaseEventState(null);
175+
176+
var clone = (BaseEventState)eventState.MemberwiseClone();
177+
178+
Assert.That(clone, Is.Not.Null);
179+
Assert.That(clone.Parent, Is.Null);
180+
}
181+
182+
/// <summary>
183+
/// Verify that Clone works correctly for derived event types.
184+
/// </summary>
185+
[Test]
186+
public void CloneNonExclusiveLimitAlarmStateSucceeds()
187+
{
188+
var parent = new BaseObjectState(null);
189+
var alarmState = new NonExclusiveLimitAlarmState(parent);
190+
191+
var clone = (NonExclusiveLimitAlarmState)alarmState.Clone();
192+
193+
Assert.That(clone, Is.Not.Null);
194+
Assert.That(clone.Parent, Is.SameAs(parent));
195+
}
196+
}
142197
}

0 commit comments

Comments
 (0)