public void Send_WithCustomEvaluator_SendsAllMessages()
        {
            // Arrange
            var evaluator = new MyEvaluator();

            var appender = new MyBufferedAppender(evaluator)
            {
                SendAsync = true
            };

            appender.ActivateOptions();

            ConfigureAppender(appender);

            var logger = LogManager.GetLogger(this.GetType());

            // Act
            logger.InfoFormat("Message 1");
            logger.InfoFormat("Message 2");
            logger.InfoFormat("Message 3");

            StopApplication();

            // Assert
            Assert.That(MessageSink.Logs.Count, Is.EqualTo(3), "All remaining messages should be sent at the end");
        }
Exemplo n.º 2
0
        public void TestMethod1()
        {
            MyEvaluator myEvaluator = new MyEvaluator(typeof(int), "1+1", "plus");
            var         result      = myEvaluator.EvaluateInt("plus");

            var intType = typeof(Int32);
        }
Exemplo n.º 3
0
        public void NormalTest1()
        {
            var evaluator = new MyEvaluator();

            Assert.Equal(20, evaluator.Eval("(8 - 5 % 7) + 3 ** 2 + 8"));
            Assert.Equal(-5, evaluator.Eval("-9 // 2"));
            Assert.Throws <ArgumentException>(() => evaluator.Eval("(8 mod 5 % 7) + 3 ** 2 + 8"));
        }
Exemplo n.º 4
0
        static void Main(string[] args)
        {
            // I would like to make the evaluators definition as simple as possible
            // to allow extensibility
            // to avoid BNF rules syntax as there are already many tools to do that

            var ev = new MyEvaluator();
            var val = ev.Eval<int>("1+2*3");
        }
Exemplo n.º 5
0
        static void Main(string[] args)
        {
            // I would like to make the evaluators definition as simple as possible
            // to allow extensibility
            // to avoid BNF rules syntax as there are already many tools to do that

            var ev  = new MyEvaluator();
            var val = ev.Eval <int>("1+2*3");
        }
Exemplo n.º 6
0
        private bool ExecuteExpression()
        {
            if (String.IsNullOrEmpty(ifCondition.Expression))
            {
                throw new ArgumentNullException(nameof(ifCondition.Expression));
            }
            // 分析表达式
            // 分析逻辑表达式的情况
            var    expressions   = ifCondition.Expression.Split(new string[] { ">", "<", "==", ">=", "<=", "!=" }, StringSplitOptions.RemoveEmptyEntries);
            string newExpression = ifCondition.Expression;

            if (expressions.Length == 2)
            {
                var expre_left = expressions[0];
                var key_value  = expre_left.Split('.');
                if (key_value.Length == 2)
                {
                    Variable variable = null;
                    switch (key_value[0])
                    {
                    case "Locals":
                        variable = Locals[key_value[1]];
                        break;

                    case "Parameters":
                        variable = Parameters[key_value[1]];
                        break;

                    default:
                        break;
                    }
                    if (variable == null)
                    {
                        throw new ArgumentNullException(expre_left);
                    }
                    switch (variable.VariableType.Name)
                    {
                    case nameof(Int32):
                        newExpression = newExpression.Replace(expre_left, variable.GetValue <Int32>().ToString());
                        break;

                    case nameof(String):
                        newExpression = newExpression.Replace(expre_left, "\"" + variable.GetValueString() + "\"");
                        break;

                    case nameof(Boolean):
                        newExpression = newExpression.Replace(expre_left, variable.GetValue <Boolean>().ToString());
                        break;

                    default:
                        break;
                    }
                }
            }
            return(MyEvaluator.EvaluateToBool(newExpression));
        }
Exemplo n.º 7
0
        public override void Run()
        {
            statementExpression = stepSetting as StatementExpression;
            if (String.IsNullOrEmpty(statementExpression.Expression))
            {
                throw new ArgumentNullException(nameof(statementExpression.Expression));
            }
            // 分析表达式
            // 分析逻辑表达式的情况
            var    expressions   = statementExpression.Expression.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);
            string newExpression = statementExpression.Expression;

            if (expressions.Length == 2)
            {
                var expre_left  = expressions[0];
                var expre_right = expressions[1];
                var key_value   = expre_left.Split('.');
                if (key_value.Length == 2)
                {
                    Variable variable = null;
                    switch (key_value[0])
                    {
                    case "Locals":
                        variable = Locals[key_value[1]];
                        break;

                    case "Parameters":
                        variable = Parameters[key_value[1]];
                        break;

                    default:
                        break;
                    }
                    if (variable == null)
                    {
                        throw new ArgumentNullException(expre_left);
                    }

                    MyEvaluator myEvaluator = new MyEvaluator(new EvaluatorItem(variable.VariableType, expre_right, "_"));
                    variable.Value = myEvaluator.Evaluate("_");
                }
            }
        }