mocha-dotnet/mocha-dotnet/tests/Mocha.Core.Tests/MethodTests/SelectFromInstanceSetMethodTests.cs

101 lines
5.1 KiB
C#

// Copyright (C) 2024 Michael Becker <alcexhim@gmail.com>
//
// This file is part of Mocha.NET.
//
// Mocha.NET is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Mocha.NET is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Mocha.NET. If not, see <https://www.gnu.org/licenses/>.
using Mocha.Core.Oop;
using Mocha.Core.Oop.Methods;
namespace Mocha.Core.Tests.MethodTests;
public class SelectFromInstanceSetMethodTests : MethodTestsBase
{
[Test]
public void Access_Modifier__get__Most_Restrictive_from_Set()
{
InstanceHandle c_AccessModifier = Oms.GetInstance(KnownInstanceGuids.Classes.AccessModifier);
// MethodReturningInstanceSet m_Access_Modifier__get__Most_Restrictive_from_Set = (MethodReturningInstanceSet) Oms.GetMethod(c_AccessModifier, "get", "Most Restrictive from Set");
InstanceHandle a_Order = Oms.GetInstance(KnownAttributeGuids.Text.Order);
WorkSet ws_Access_Modifier__Nonsingular = Oms.CreateWorkSet("Access Modifier [Nonsingular]", false);
WorkSet ws_Access_Modifier__Singular = Oms.CreateWorkSet("Access Modifier [Singular]", true);
OmsMethodBuilder methodBuilder = new OmsMethodBuilder(Oms);
GetAttributeMethod get_Order = methodBuilder.CreateGetAttributeMethod(c_AccessModifier, "get", "Order", a_Order);
SelectFromInstanceSetMethod m_Access_Modifier__get__Most_Restrictive_from_Set = methodBuilder.CreateSelectFromInstanceSetMethod(c_AccessModifier, "get", "Most Restrictive from Set", AccessModifier.Public, true, ws_Access_Modifier__Singular, ws_Access_Modifier__Nonsingular, null, Oms.GetInstance(KnownInstanceGuids.SelectionFunctions.Minimum), get_Order.GetHandle());
if (m_Access_Modifier__get__Most_Restrictive_from_Set != null)
{
ReturnInstanceSetMethodBinding rsmb = m_Access_Modifier__get__Most_Restrictive_from_Set.CreateMethodBinding(Oms);
OmsContext context = Oms.CreateContext();
context.SetWorkData(ws_Access_Modifier__Nonsingular, new InstanceWrapper[]
{
AccessModifier.Private,
AccessModifier.Protected,
AccessModifier.Public,
AccessModifier.RootA2
});
InstanceHandle workData = Oms.Execute(context, rsmb);
object? value = context.GetWorkData(workData);
Assert.That(value is InstanceHandle);
Assert.That((InstanceHandle?)value, Is.EqualTo(AccessModifier.Private.GetHandle()));
}
}
[Test]
public void Element__get__First_Element_Content()
{
Class c_Element = Oms.GetInstance<Class>(KnownInstanceGuids.Classes.Element);
Class c_ElementContent = Oms.GetInstance<Class>(KnownInstanceGuids.Classes.ElementContent);
GetRelationshipMethod m_Element__get__Element_Contents = Oms.MethodBuilder.CreateGetRelationshipMethod(c_Element, "get", "Element Contents", AccessModifier.Public, Oms.GetInstance(KnownRelationshipGuids.Element__has__Element_Content));
ReturnInstanceSetMethodBinding Element__get__Element_Contents = m_Element__get__Element_Contents.CreateMethodBinding(Oms);
GetAttributeMethod m_getOrder = Oms.MethodBuilder.CreateGetAttributeMethod(c_ElementContent, "get", "Order", Oms.GetInstance(KnownAttributeGuids.Text.Order));
ReturnAttributeMethodBinding Element_Content__get__Order = m_getOrder.CreateMethodBinding(Oms);
WorkSet wsE = Oms.CreateWorkSet("Returned Element Content [Singular]");
Oms.SetAttributeValue(wsE, Oms.GetInstance(KnownAttributeGuids.Boolean.Singular), true);
SelectFromInstanceSetMethod m_getFirstElementContent = Oms.MethodBuilder.CreateSelectFromInstanceSetMethod(c_Element, "get", "First Element Content", AccessModifier.Public, false, wsE, Element__get__Element_Contents, null, Oms.GetInstance(KnownInstanceGuids.SelectionFunctions.First), Element_Content__get__Order);
ReturnInstanceSetMethodBinding getFirstElementContent = m_getFirstElementContent.CreateMethodBinding(Oms);
InstanceHandle element = Oms.CreateInstanceOf(Oms.GetInstance(KnownInstanceGuids.Classes.Element));
InstanceHandle ec1 = Oms.CreateInstanceOf(Oms.GetInstance(KnownInstanceGuids.Classes.ElementContent));
InstanceHandle ec2 = Oms.CreateInstanceOf(Oms.GetInstance(KnownInstanceGuids.Classes.ElementContent));
InstanceHandle ec3 = Oms.CreateInstanceOf(Oms.GetInstance(KnownInstanceGuids.Classes.ElementContent));
InstanceHandle ec4 = Oms.CreateInstanceOf(Oms.GetInstance(KnownInstanceGuids.Classes.ElementContent));
InstanceHandle ec5 = Oms.CreateInstanceOf(Oms.GetInstance(KnownInstanceGuids.Classes.ElementContent));
Oms.AssignRelationship(element, Oms.GetInstance(KnownRelationshipGuids.Element__has__Element_Content), new InstanceHandle[]
{
ec1, ec2, ec3, ec4, ec5
});
OmsContext context = Oms.CreateContext();
context.SetWorkData(c_Element, element);
InstanceHandle ws = Oms.Execute(context, getFirstElementContent);
object? obj = context.GetWorkData(ws);
Assert.That(obj, Is.EqualTo(ec1));
}
}