public async Task TestBoolExpressionsActuators()
        {
            var config = new MustacheConfigSchema()
            {
                Params = new List <Param>
                {
                    new Param {
                        Name = "MySql", DefaultValue = "true"
                    },
                    new Param {
                        Name = "MySqlEFCore", DefaultValue = "false"
                    },
                    new Param {
                        Name = "C", DefaultValue = "false"
                    },
                },
            };
            var dv = new Dictionary <string, string>
            {
                { "MySql", "true" },
                { "MySqlEFCore", "false" },
            };
            var calcParam = new CalculatedParam
            {
                Name           = "MySqlOrMySqlEFCore",
                Expression     = "MySql || MySqlEFCore",
                ExpressionType = ExpressionTypeEnum.Bool,
            };

            var expression = new BooleanExpression(_logger, calcParam, config);
            var result     = await expression.EvaluateExpressionAsync(dv);

            Assert.Equal(true.ToString(), result);
        }
        public async Task TestAnyExpression()
        {
            var config = new MustacheConfigSchema()
            {
                Params = new List <Param>
                {
                    new Param {
                        Name = "MySql", DefaultValue = "true"
                    },
                    new Param {
                        Name = "MySqlEFCore", DefaultValue = "false"
                    },
                    new Param {
                        Name = "C", DefaultValue = "false"
                    },
                },
            };
            var dv = new Dictionary <string, string>
            {
                { "MySql", "true" },
            };
            var calcParam = new CalculatedParam
            {
                Name           = "AnyEFCore",
                Expression     = "MySql,Postgres,Redis,MongoDB,OAuthConnector",
                ExpressionType = ExpressionTypeEnum.Any,
            };

            var expression = new AnyExpression(_logger, calcParam, config);
            var result     = await expression.EvaluateExpressionAsync(dv);

            Assert.Equal("True", result);
        }
Exemplo n.º 3
0
        public EvaluationExpression BuildEvaluationExpression(MustacheConfigSchema schema)
        {
            using (Timing.Over(_logger, "Build case Expression"))
            {
                // TODO: Add validation
                string EvaluationExpression(Dictionary <string, string> dataView)
                {
                    var terms         = _param.Expression.Split(',');
                    var lookupKey     = terms[0]; // First term is the lookup Case(term0) { ...
                    var dataViewValue = dataView.ContainsKey(lookupKey) ? dataView[lookupKey] : string.Empty;
                    var caseResult    = string.Empty;

                    foreach (var term in terms.Skip(1))
                    {
                        var expression = term.Split('=');
                        if ((dataViewValue == null || !expression[0].Equals(dataViewValue)) &&
                            expression[0] != "default")
                        {
                            continue;
                        }

                        caseResult = expression[1];
                        break;
                    }

                    return(caseResult);
                }

                return(EvaluationExpression);
            }
        }
        public async Task TestCaseExpression()
        {
            var config = new MustacheConfigSchema()
            {
                Params = new List <Param>
                {
                    new Param {
                        Name = "MySql", DefaultValue = "true"
                    },
                    new Param {
                        Name = "MySqlEFCore", DefaultValue = "false"
                    },
                    new Param {
                        Name = "C", DefaultValue = "false"
                    },
                },
            };
            var dv = new Dictionary <string, string>
            {
                { "TargetFrameworkVersion", "netcoreapp2.2" },
            };
            var calcParam = new CalculatedParam
            {
                Name           = "AspNetCoreVersion",
                Expression     = "TargetFrameworkVersion,netcoreapp2.2=2.2.0,netcoreapp2.1=2.1.1,default=False",
                ExpressionType = ExpressionTypeEnum.Case,
            };

            var expression = new CaseExpression(_logger, calcParam, config);
            var result     = await expression.EvaluateExpressionAsync(dv);

            Assert.Equal("2.2.0", result);
        }
        public async Task TestStringExpression()
        {
            var config = new MustacheConfigSchema()
            {
                Params = new List <Param>
                {
                    new Param {
                        Name = "MySql", DefaultValue = "true"
                    },
                    new Param {
                        Name = "MySqlEFCore", DefaultValue = "false"
                    },
                    new Param {
                        Name = "C", DefaultValue = "false"
                    },
                },
            };
            var dv = new Dictionary <string, string>
            {
                { "TargetFrameworkVersion", "netcoreapp2.2" },
            };
            var calcParam = new CalculatedParam
            {
                Name           = "AspNetCoreVersion",
                Expression     = "dataView => dataView[\"TargetFrameworkVersion\"]==\"netcoreapp2.2\"? \"2.2.0\": null",
                ExpressionType = ExpressionTypeEnum.Bool,
            };

            var expression = new StringExpression(_logger, calcParam, config);
            var result     = await expression.EvaluateExpressionAsync(dv);

            Assert.Equal("2.2.0", result);
        }
Exemplo n.º 6
0
        public EvaluationExpression BuildEvaluationExpression(MustacheConfigSchema config)
        {
            var options = ScriptOptions.Default.AddReferences(Assembly.GetExecutingAssembly());

            using (Timing.Over(_logger, "Build StringExpression"))
            {
                return(CSharpScript.EvaluateAsync <EvaluationExpression>(_param.Expression, options).Result);
            }
        }
Exemplo n.º 7
0
 public EvaluationExpression BuildEvaluationExpression(MustacheConfigSchema schema)
 {
     // TODO: Add validation
     using (Timing.Over(_logger, "Build Any Expression"))
     {
         var keys = _param.Expression.Split(',');
         return(dataView => dataView.Any(kvp =>
                                         keys.Contains(kvp.Key) &&
                                         bool.TryParse(kvp.Value.ToString(), out var boolValue) &&
                                         boolValue).ToString());
     }
 }
        public async Task Test_MorethanOneExpression_false()
        {
            var config = new MustacheConfigSchema();
            var dv     = new Dictionary <string, string>
            {
                { "IsMoreThanOne", "false" },
                { "ConfigServer", "false" },
                { "SQLServer", "true" },
                { "Redis", "false" },
            };
            var calcParam = new CalculatedParam
            {
                Name           = "IsMoreThanOne",
                Expression     = "ConfigServer,SQLServer,Redis",
                ExpressionType = ExpressionTypeEnum.MoreThanOne,
            };

            var expression = new MoreThanOneExpression(_logger, calcParam, config);
            var result     = await expression.EvaluateExpressionAsync(dv);

            Assert.Equal("False", result);
        }
        public async Task TestBoolExpressions()
        {
            var config = new MustacheConfigSchema()
            {
                Params = new List <Param>
                {
                    new Param {
                        Name = "A", DefaultValue = "true"
                    },
                    new Param {
                        Name = "B", DefaultValue = "false"
                    },
                    new Param {
                        Name = "C", DefaultValue = "false"
                    },
                },
            };

            var dv = new Dictionary <string, string>
            {
                { "A", "true" },
                { "B", "false" },
                { "C", "false" },
            };

            var calcParam = new CalculatedParam
            {
                Name           = "testExp",
                Expression     = "A || B && !C ",
                ExpressionType = ExpressionTypeEnum.Bool,
            };

            var expression = new BooleanExpression(_logger, calcParam, config);
            var result     = await expression.EvaluateExpressionAsync(dv);

            Assert.Equal("True", result);
        }
Exemplo n.º 10
0
        private string GetLambdaString(MustacheConfigSchema config)
        {
            var lambda = string.Empty;

            var expressionString = _param.Expression;
            var tree             = SyntaxFactory.ParseExpression(expressionString);

            foreach (var node in tree.DescendantTokens())
            {
                var key = node.ToString();
                if (config.Params.Any(p => p.Name == key))
                {
                    lambda += $" (bool.TryParse(dataView[\"{key}\"], out bool bool{key}Value) && bool{key}Value)";
                }
                else
                {
                    lambda += key;
                }
            }

            lambda = "dataView => { bool result = " + lambda + "; return result.ToString(); }";
            _logger.LogDebug("Created boolean lambda : " + lambda);
            return(lambda);
        }
Exemplo n.º 11
0
 public MoreThanOneExpression(ILogger logger, CalculatedParam param, MustacheConfigSchema schema)
 {
     _param  = param;
     _logger = logger;
     _evaluationExpression = BuildEvaluationExpression(schema);
 }
Exemplo n.º 12
0
 public StringExpression(ILogger logger, CalculatedParam param, MustacheConfigSchema config)
 {
     _param  = param;
     _logger = logger;
     _evaluationExpression = BuildEvaluationExpression(config);
 }