diff --git a/mocha-dotnet/src/lib/Mocha.Core/Oms.cs b/mocha-dotnet/src/lib/Mocha.Core/Oms.cs index 2da49be..47ea475 100644 --- a/mocha-dotnet/src/lib/Mocha.Core/Oms.cs +++ b/mocha-dotnet/src/lib/Mocha.Core/Oms.cs @@ -32,6 +32,7 @@ using System.Text; using System.Text.Json.Nodes; using System.Xml.XPath; using MBS.Core; +using MBS.Core.Collections; using MBS.Core.Extensibility; using MBS.Core.IO; using Mocha.Core.MethodImplementations; @@ -510,6 +511,11 @@ public abstract class Oms } public InstanceHandle CreateInstanceOf(IInstanceReference ir_class, Guid guid) { + if (TryGetInstance(guid, out InstanceHandle ihAlreadyExists)) + { + throw new DuplicateKeyException(); + } + if (GetParentClass(ir_class) != GetInstance(KnownInstanceGuids.Classes.Class)) { throw new InvalidOperationException("cannot create instance of something that is not a Class"); diff --git a/mocha-dotnet/tests/Mocha.Core.Tests/BasicTests.cs b/mocha-dotnet/tests/Mocha.Core.Tests/BasicTests.cs index bc5a478..f1d4251 100644 --- a/mocha-dotnet/tests/Mocha.Core.Tests/BasicTests.cs +++ b/mocha-dotnet/tests/Mocha.Core.Tests/BasicTests.cs @@ -16,8 +16,8 @@ // along with Mocha.NET. If not, see . using System.Runtime.CompilerServices; - -using Mocha.Core.OmsImplementations.Mini; +using MBS.Core.Collections; +using Mocha.Core.Oop; namespace Mocha.Core.Tests; @@ -168,4 +168,13 @@ public class BasicTests : OmsTestsBase Assert.That(ihTextAttribute2, Is.EqualTo(ihTextAttribute)); } -} \ No newline at end of file + [Test] + public void Create_Instance_with_Existing_Global_Identifier_Fails() + { + Assert.Throws(delegate () + { + InstanceHandle c_Attribute = Oms.CreateInstanceOf(Oms.GetInstance(KnownInstanceGuids.Classes.Class), KnownInstanceGuids.Classes.Attribute); + }); + } + +} diff --git a/mocha-dotnet/tests/Mocha.Core.Tests/OmsTestsBase.cs b/mocha-dotnet/tests/Mocha.Core.Tests/OmsTestsBase.cs index 4f88be6..a84d265 100644 --- a/mocha-dotnet/tests/Mocha.Core.Tests/OmsTestsBase.cs +++ b/mocha-dotnet/tests/Mocha.Core.Tests/OmsTestsBase.cs @@ -51,13 +51,13 @@ public abstract class OmsTestsBase // create the Test Class InstanceHandle c_Class = Oms.GetInstance(KnownInstanceGuids.Classes.Class); - InstanceHandle irTestClass = Oms.CreateInstanceOf(c_Class, TEST_CLASS_GUID); + InstanceHandle irTestClass = Oms.GetInstance(TEST_CLASS_GUID); Assert.That(irTestClass, Is.Not.EqualTo(InstanceHandle.Empty)); InstanceHandle a_Name = Oms.GetInstance(KnownAttributeGuids.Text.Name); Oms.SetAttributeValue(irTestClass, a_Name, "Test Class"); - InstanceHandle irTestClass2 = Oms.CreateInstanceOf(c_Class, TEST_CLASS2_GUID); + InstanceHandle irTestClass2 = Oms.GetInstance(TEST_CLASS2_GUID); Assert.That(irTestClass2, Is.Not.EqualTo(InstanceHandle.Empty)); Oms.SetAttributeValue(irTestClass2, Oms.GetInstance(KnownAttributeGuids.Text.Name), "Test Class 2");