add test for passing a parm via a system routine
This commit is contained in:
parent
80127b4399
commit
87ad532073
@ -1185,14 +1185,44 @@ public abstract class Oms
|
||||
{
|
||||
return Execute(context, methodBinding.GetHandle());
|
||||
}
|
||||
public object? ExecuteReturningAttributeValue(OmsContext context, ReturnAttributeMethodBinding methodBinding)
|
||||
public object? ExecuteReturningAttributeValue(OmsContext context, ReturnAttributeMethodBinding methodBinding, KeyValuePair<InstanceHandle, object>[]? parms)
|
||||
{
|
||||
// override any specified parms we have
|
||||
Dictionary<InstanceHandle, object>? oldParms = null;
|
||||
if (parms != null)
|
||||
{
|
||||
oldParms = new Dictionary<InstanceHandle, object>();
|
||||
foreach (KeyValuePair<InstanceHandle, object> kvp in parms)
|
||||
{
|
||||
if (context.HasWorkData(kvp.Key))
|
||||
{
|
||||
oldParms[kvp.Key] = context.GetWorkData(kvp.Key);
|
||||
}
|
||||
else
|
||||
{
|
||||
oldParms[kvp.Key] = null;
|
||||
}
|
||||
|
||||
context.SetWorkData(kvp.Key, kvp.Value);
|
||||
}
|
||||
}
|
||||
|
||||
// call the internal MethodImplementation
|
||||
InstanceHandle workData = Execute(context, methodBinding.GetHandle());
|
||||
|
||||
// restore the original parms
|
||||
if (oldParms != null)
|
||||
{
|
||||
foreach (KeyValuePair<InstanceHandle, object> kvp in oldParms)
|
||||
{
|
||||
context.SetWorkData(kvp.Key, kvp.Value);
|
||||
}
|
||||
}
|
||||
return context.GetWorkData(workData);
|
||||
}
|
||||
public T ExecuteReturningAttributeValue<T>(OmsContext context, ReturnAttributeMethodBinding methodBinding, T defaultValue = default(T))
|
||||
public T ExecuteReturningAttributeValue<T>(OmsContext context, ReturnAttributeMethodBinding methodBinding, T defaultValue = default(T), KeyValuePair<InstanceHandle, object>[]? parms = null)
|
||||
{
|
||||
object? value = ExecuteReturningAttributeValue(context, methodBinding);
|
||||
object? value = ExecuteReturningAttributeValue(context, methodBinding, parms);
|
||||
if (value is T)
|
||||
{
|
||||
return (T)value;
|
||||
|
||||
@ -61,6 +61,10 @@ public class OmsContext
|
||||
|
||||
private Dictionary<InstanceHandle, object?> _WorkData = new Dictionary<InstanceHandle, object?>();
|
||||
private Dictionary<InstanceHandle, object?> _GlobalData = new Dictionary<InstanceHandle, object?>();
|
||||
public bool HasWorkData(IInstanceReference parm)
|
||||
{
|
||||
return _WorkData.ContainsKey(parm.GetHandle());
|
||||
}
|
||||
public object? GetWorkData(IInstanceReference parm)
|
||||
{
|
||||
if (_WorkData.ContainsKey(parm.GetHandle()))
|
||||
|
||||
@ -46,6 +46,32 @@ public class SystemRoutineTests : MethodTestsBase
|
||||
Assert.That(value, Is.EqualTo(TEST_SYSTEM_ATTRIBUTE_ROUTINE_VALUE));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void PassParmViaSystemRoutineTest()
|
||||
{
|
||||
InstanceHandle irTestClass = Oms.GetInstance(TEST_CLASS_GUID);
|
||||
OmsMethodBuilder methodBuilder = new OmsMethodBuilder(Oms);
|
||||
OmsSystemRoutineBuilder systemRoutineBuilder = new OmsSystemRoutineBuilder(Oms);
|
||||
|
||||
SystemAttributeRoutine<string> testSystemAttributeRoutine = systemRoutineBuilder.CreateSystemAttributeRoutine(TEST_SYSTEM_ATTRIBUTE_ROUTINE_GUID, delegate (Oms oms, OmsContext context)
|
||||
{
|
||||
string value = context.GetWorkData<string>(oms.GetInstance(KnownAttributeGuids.Text.Token));
|
||||
return TEST_SYSTEM_ATTRIBUTE_ROUTINE_VALUE + value;
|
||||
});
|
||||
|
||||
GetAttributeBySystemRoutineMethod gasMethod = methodBuilder.CreateGetAttributeBySystemRoutineMethod(irTestClass, "get", "Test System Routine Text Attribute", AccessModifier.Public, true, Oms.GetInstance(KnownAttributeGuids.Text.Value), testSystemAttributeRoutine);
|
||||
ReturnAttributeMethodBinding gasMethodRamb = methodBuilder.CreateReturnAttributeMethodBinding(gasMethod);
|
||||
|
||||
OmsContext context = Oms.CreateContext();
|
||||
string value = Oms.ExecuteReturningAttributeValue<string>(context, gasMethodRamb, null, new KeyValuePair<InstanceHandle, object>[]
|
||||
{
|
||||
// !!! WARNING: do not use 'Value' here as it is the return type attribute of the GAS method and WILL be overwritten after execution !!!
|
||||
new KeyValuePair<InstanceHandle, object>(Oms.GetInstance(KnownAttributeGuids.Text.Token), "pqdms")
|
||||
});
|
||||
|
||||
Assert.That(value, Is.EqualTo(TEST_SYSTEM_ATTRIBUTE_ROUTINE_VALUE + "pqdms"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetRandomNumberTest()
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user