public object Execute(VariableContext context = null) { var funcName = _function.Execute(context); if (funcName is Variable outFuncVar && outFuncVar.ValueType == DataTypeEnum.Function) { if (_parameters is PositionalParameters) { var lVars = RetrieveListOfParameters(context); return(outFuncVar.UserFunction.Execute(lVars, context)); } if (_parameters is NamedParameters nParams) { return(outFuncVar.UserFunction.Execute(null, context, nParams)); } } if (funcName is Variable outFuncName && outFuncName.ValueType == DataTypeEnum.String) { List <Variable> lVars = new List <Variable> (); if (_parameters is PositionalParameters) { lVars = RetrieveListOfParameters(context); if (VariableContextHelper.RetrieveBkm(outFuncName, context, out var bkmMeta)) { return(DMNDoerHelper.EvalBkm(bkmMeta.BKMModel, context, lVars)); } if (context.DecisionServiceMetaByName.TryGetValue(outFuncName, out var decisionService)) { return(DMNDoerHelper.EvalDecisionService(decisionService, context, lVars)); } } if (_parameters is NamedParameters namedParam) { if (VariableContextHelper.RetrieveBkm(outFuncName, context, out var bkmMeta)) { lVars = BKMConvertNamedParameter(namedParam, bkmMeta.BKMModel, context); return(DMNDoerHelper.EvalBkm(bkmMeta.BKMModel, context, lVars)); } if (context.DecisionServiceMetaByName.TryGetValue(outFuncName, out var decisionService)) { lVars = DecisionServiceConvertNamedParameter(namedParam, decisionService, context); return(DMNDoerHelper.EvalDecisionService(decisionService, context, lVars)); } } var funcMeta = BuiltInFactory.GetFunc(outFuncName); if (_parameters is NamedParameters nParam) { lVars = BuiltInFactory.ConvertNamedParameter(nParam, funcMeta.Item2, context); } return(funcMeta.Item1.Execute(lVars)); } throw new FEELException("Function name is not a variable of string type"); }
public void ConvertNamedParameters_Failed() { var funcMeta = BuiltInFactory.GetFunc(NotFunc.FuncName); var namedP = new NamedParameters(null); var err = Assert.Throws <FEELException> (() => BuiltInFactory.ConvertNamedParameter(namedP, funcMeta.Item2, null)); Assert.Equal("Failed coverting named parameters", err.Message); }
public void Function_Found() { var lVars = new List <Variable> (); lVars.Add(true); var funcMeta = BuiltInFactory.GetFunc(NotFunc.FuncName); var boolVar = funcMeta.Item1.Execute(lVars); Assert.False(boolVar); }
public void ConvertNamedParameters_Names_Matched() { var funcMeta = BuiltInFactory.GetFunc(NotFunc.FuncName); var nParamDict = new Dictionary <string, IExpression> () { { "negand", new BooleanLiteral("true") } }; var namedP = new NamedParameters(nParamDict); var lParams = BuiltInFactory.ConvertNamedParameter(namedP, funcMeta.Item2, null); var boolVar = funcMeta.Item1.Execute(lParams); Assert.False(boolVar); }
public void Function_NotFound_Error() { Assert.Throws <FEELException> (() => BuiltInFactory.GetFunc("x")); }